我是 AJAX 新手,最近一直在學習 jQuery get() 和 post() 方法的功能。雖然 get() 方法運行順利,但我在遇到 post() 方法時卻步履蹣跚,每次嘗試呼叫它時都會拋出一個錯誤:“405(不允許方法)”。
使用 Bootstrap,我有一個名為 get_post.html 的簡單 HTML 檔案,每個檔案都有一個 div、段落和按鈕元素。使用 jQuery,在按鈕的單擊事件上,我使用 post() 方法將名稱和位置發送到名為 mypost.php 的 php 檔案,該檔案將處理資料并將一串訊息發送回 get_post.html。我想在 get_post.html 的段落元素中顯示最終訊息。在嘗試實作此目的時,每次單擊按鈕時,瀏覽器控制臺都會顯示上述錯誤訊息。假設問題與 CORS 策略有某種關系,我必須提到 get_post.html 和 mypost.php 檔案位于同一域下的同一檔案夾中。那么怎么會是 CORS 政策相關的錯誤呢?此外,我使用 Node.js http-server localhost 來運行 get_post.html 檔案。因此,任何與 localhost 相關的問題也不太可能發生。此外,我在運行 http-server 時啟用和禁用了 CORS,但無濟于事。我也嘗試過使用 IIS,但同樣的問題也出現在那里。
那么,什么可能導致錯誤,我該如何擺脫它?由于我是 AJAX 新手,我不太習慣它的復雜性。網上的大部分解決方案都與我的場景無關;因此,我無法從他們那里獲得太多幫助。如果可能,請使用基本級別的示例幫助解決這個問題。
get_post.html 代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.js"></script>
<!-- Popper JS -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<title>Document</title>
</head>
<body>
<div class="container">
<p id="loadedData">This is where data will be loaded from server dynamically.</p>
<button class="btnLoad btn btn-primary">Load Data</button>
</div>
<script type="text/javascript">
$(document).ready(function() {
$(".btnLoad").click(function() {
// Fetching data using post() method.
$.post("mypost.php", {
name: "Firstname Lastname",
location: "Countryname"
}, function(data, status) {
$("#loadedData").html(data);
alert(status);
});
});
});
</script>
</body>
</html>
mypost.php 代碼:
<?php
$name = $_POST["name"];
$location = $_POST["location"];
echo "This is ".$name.". I'm from ".$location".";
?>
感謝和問候!
uj5u.com熱心網友回復:
[...] 每次我嘗試呼叫它時都會拋出一個錯誤:“405(不允許的方法)”。
您正在請求一條不接受 Post 方法的路由,因此它給出了錯誤。這里解釋一下:
405 Method Not Allowed 超文本傳輸??協議 (HTTP) 405 Method Not Allowed 回應狀態代碼表示服務器知道請求方法,但目標資源不支持此方法。
服務器必須在 405 狀態代碼回應中生成一個 Allow 標頭欄位。該欄位必須包含目標資源當前支持的方法串列。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405
由于您顯然只是使用沒有框架或依賴項的純 PHP,您應該檢查正在接收哪種型別的請求。
$method = $_SERVER['REQUEST_METHOD'];
print_r($method);
如果上面的代碼回傳 POST 以外的內容,則說明您在某處阻止了 Post 請求,請嘗試在沒有 Jquery/Ajax 的情況下使用它,如果有效,則可能會根據您的配置發送額外的標頭或令牌。
uj5u.com熱心網友回復:
我找到了解決方案。這完全是關于不支持 post() 方法的 PHP 檔案。
兩件事幫助我找到了問題的根源。首先,@Teemu 表示Node.js http-server盡管充當本地主機,但不運行 php。其次,@Macedo_Montalv?o 提到:“405 Method Not Allowed 回應狀態碼表示服務器知道請求方法,但目標資源不支持該方法。” 這促使我安裝專用的 PHP 服務器。因此,我按照此處和此處的說明在帶有 IIS 的 Windows 上托管 PHP 。此后,我從 IIS 中托管了我的專案檔案夾,現在 post() 方法完美運行,兩個頁面的通信也符合要求。
但是,我的代碼中有一個錯字。在mypost.php檔案中,陳述句末尾會有一個.after ,我忽略了。那是拋出 500(內部服務器錯誤)。$locationecho
感謝 @Teemu 和 @Macedo_Montalv?o 的建議和分享這兩個寶貴的鏈接。保持良好!
問候!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/399011.html
標籤:javascript html 查询 阿贾克斯 邮政
