[英]jQuery AJAX/POST not sending data to PHP
所以我現在有這個問題有一段時間了,我知道關於這個主題有無數的問題,相信我,我嘗試了所有可能的解決方案,但仍然不起作用。
這是最簡單的例子,在我的情況下不起作用
jQuery:
$.ajax({
url: "ajax/add-user.php",
type: "POST",
data: {name: 'John'},
success: function(data){
console.log(data);
}
});
PHP
echo json_encode($_POST);
就是這樣。 我總是得到一個空數組作為響應。 我嘗試使用serialize()
獲取data:
但響應始終為空。 我沒有收到任何錯誤,只有一個空數組,當我應該獲取發布的值時。
例如,如果在 php 中我嘗試echo
一些我得到的硬編碼變量,但$_POST
和$_GET
不起作用。
我如何識別問題的任何解決方案或方法?
謝謝你。
編輯/解決方案
好的,看來問題出在 .htaccess 上,它重寫了 url 並刪除了擴展名。 在網絡選項卡中,請求確實被永久移動了。 從 ajax url 中刪除 .php 擴展名:解決了它。 謝謝你,很抱歉浪費時間。 干杯
您需要在ajax調用中將數據類型設置為json。
查詢代碼:
$.ajax({
url: "ajax/add-user.php",
type: "POST",
dataType:'json',
data: {name: 'John'},
success: function(data){
console.log(data);
}
});
同時驗證你的后端代碼(php),是否可以接受json
數據?
如果沒有,請按如下方式配置標頭:
代碼:
/**
* Send as JSON
*/
header("Content-Type: application/json", true);
快樂編碼:
我最近遇到了這個問題,但由於其他原因:
我的原因 - 我在服務器上注冊了一個網址:
http://mywebsite.com/folder/path/to/service/
但我的客戶打來電話:
http://mywebsite.com/folder/path/to/service
服務器上的 .htaccess 將其讀取為 301 GET 重定向到正確的 URL 並刪除了 POST 數據。 簡單的解決方案是仔細檢查 url 路徑。
@C.Ovidiu、@MarcB - 你們倆在調試中為我節省了很多時間!
為什么不使用jQuery.post ?
$.post("ajax/add-user.php",
{name: 'John'},
function(response){
console.log(response);
}
);
然后在您的 PHP 中,您可以像這樣保存輸入:
if(isset($_POST["name"]))
{
$name= $_POST["name"];
file_put_contents("name.txt", $name)
header('HTTP/1.1 200 OK');
}
else
{
header('HTTP/1.1 500 Internal Server Error');
}
exit;
我遇到了同樣的問題,結果是我的data
對象中的變量之一未定義。 出於某種原因,阻止了發布數據的發送。 將變量設置為 undefined 以外的其他值可以解決問題。
嘗試編輯您的代碼並使用:
$.ajax({url: 'ajax/add-user.php',
type: 'POST',
data: {name: 'John'},
dataType: 'html',
success: function(data){
alert("success");
console.log(data);
},error: function (xhr, ajaxOptions, thrownError) {alert("ERROR:" + xhr.responseText+" - "+thrownError);}
});
(因此您將收到錯誤和成功警報,確保您收到的是 html。這些額外的參數將幫助您微調 ajax 調用。稍后使用 async true/false)
此外,在新窗口中運行您的程序 ajax/add-user.php(輸入 url)並查看它的回聲。編輯程序並強制向您回顯一些“即傳奇的你好世界”,看看您的 ajax 是否收到消息.
祝你好運。
你應該檢查你的 .htaccess 文件,用“#”符號關閉行
# To externally redirect /dir/foo.php to /dir/foo
# RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
# RewriteRule ^ %1/ [R,L]
我嘗試了很多東西,但我發現以下工作代碼適合我:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) ) {
$_POST = json_decode(file_get_contents('php://input'), true);
}
如果您嘗試,這將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.