簡體   English   中英

jQuery AJAX/POST 不向 PHP 發送數據

[英]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);

快樂編碼:

我最近遇到了這個問題,但由於其他原因:

  1. 我的 POST 數據被重定向為 301
  2. 我的服務器請求是 GET
  3. 我沒有得到我的 POST 數據

我的原因 - 我在服務器上注冊了一個網址:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM