簡體   English   中英

PHP $ _POST在AJAX發布請求期間為空

[英]PHP $_POST empty during AJAX post request

目標:序列化數據,使用AJAX在HTTP POST請求中發送數據,在PHP中處理數據(並回答)

問題: PHP $ _POST變量似乎為空

JS / AJAX

var postData = [cmd, data];
alert(postData = JSON.stringify(postData));

$.ajax({
   url: "./backendTag.php",
   type: "post",
   data: postData,
   dataType: 'json',
   success: function (response) {
      alert(response); // Empty
      //logToServerConsole(JSON.parse(response));
   },
   error: function(jqXHR, textStatus, errorThrown) {
      logToServerConsole("E3"); // Communication Error
      console.log(textStatus, errorThrown);
   }
});

PHP

<?php echo json_encode($_POST);

這樣做的原因可能是因為您沒有在javascript中正確發布。 在添加代碼之前,讓我添加一些有關如何在這些情況下進行調試的提示。

首先,您檢查請求的格式是否正確。 在瀏覽器開發工具中檢查網絡。

第二種方法是在$ _POST上使用var_dump列出所有post參數,並檢查它們是否已在PHP中接收到。

現在就代碼而言

這是JavaScript

$.ajax({
  method: "POST",
  url: "url.php",
  data: { name: "John Doe", age: "19" }
}).done(function( msg ) {
  alert(msg);
});

在PHP中,您可以簡單地使用

<?php
print $_POST["name"];
?>

這將完美地工作。 請注意,javascript中的數據是如何列表的,而從您寫的內容來看似乎是json字符串

顯然我們不能在序列化他之后直接傳遞數組。 以下代碼解決了該問題。 (拆分數組)

data = JSON.stringify(data);
var JSONdata = {"cmd" : cmd, "data" : data};

$.ajax({
   url: "./backendTag.php",
   type: "post",
   data: JSONata,
   dataType: 'json',

   /* Handlers hidden*/
});

JSON內容不會解析為$ _POST全局變量。 如果您想達到這些目標,請嘗試從php:// input獲取:

file_get_contents('php://input')

而且我建議在ajax請求期間提供content-type:

contentType: 'application/json',

如果不起作用,請嘗試使用JSON.Stringify將數據設置為字符串,如下所示:

data: JSON.stringify(postData)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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