Javascript 无法使用PHP从Ajax POST获取JSON

Javascript 无法使用PHP从Ajax POST获取JSON,javascript,php,json,ajax,post,Javascript,Php,Json,Ajax,Post,我正在向我的PHP脚本发送JSON。我无法从JSON获取对象值。这篇文章的格式如下: [{“名称”:“金额”,“价值”:“12”}] Javascript ("#idForm").submit(function(e) { var url = "post.php"; // the script where you handle the form input. var formData = JSON.stringify($("#idForm").serializeArray

我正在向我的PHP脚本发送JSON。我无法从JSON获取对象值。这篇文章的格式如下:

[{“名称”:“金额”,“价值”:“12”}]

Javascript

("#idForm").submit(function(e) {

      var url = "post.php"; // the script where you handle the form input.
      var formData = JSON.stringify($("#idForm").serializeArray());
      alert(formData);

      $.ajax({
        type: "POST",
        url: url,
        data: formData,
        dataType: 'json',
        success: function(dataresponse) {
          document.getElementById("orderamount").innerHTML = dataresponse.orderamount;
        }
      });
PHP

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

$data = array();

$json = json_decode(file_get_contents('php://input'), true);
$data['orderamount'] = $json['amount'];
//this works 
//$data['orderamount'] = '12345';

echo json_encode($data); 
}

知道我做错了什么吗?

请在发送请求之前再试一次

 setRequestHeader("Content-type", "application/x-www-form-urlencoded");

我们可以解析JSON数组和其中的字典,就像这样

<?php
$json = "[{\"name\":\"amount\",\"value\":\"12\"}]";
$dec = json_decode($json,true);

for($idx = 0; $idx < count($dec); $idx++){
    $obj = (Array)$dec[$idx];
    echo $obj["name"];
}
?>

作为响应


document.getElementById(“orderamount”).innerHTML=dataresponse['orderamount']

在您的示例json中有两个参数,name和value

[{“名称”:“金额”,“价值”:“12”}]

您应该使用
$json['name']
而不是
$json['amount']
。您可以尝试以下示例

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$data = array();
$json = json_decode(file_get_contents('php://input'), true);
if($json['name']=='amount') {
$data['orderamount'] = $json['value'];
}
echo json_encode($data); 
}

可能的问题:1)尝试console.log(formData)并检查它是否正确。2) log(dataresponse)并检查通过dataresponse.orderamount访问数据是否正确。3) 在PHP中,检查您是否真的加入了if,也许将内容记录在.txt或.html文件中,以跟踪正在发生的事情(使用文件内容)。在所有这些情况下,javascript控制台都是您最好的朋友,它通常会告诉您哪些不起作用,或者作为响应返回哪些内容。但是PHP不会(不是直接通过AJAX请求),因此也要注意第三点。json具有数组的语法,该数组可能包含许多名称/值元组。将其视为一个数组。Web控制台没有多大帮助。我将PHP脚本中的内容写入一个txt文件。输出是-a:5:{i:0;a:2:{s:4:“名称”;s:6:“金额”;s:5:“值”;s:2:“12”}它不是应用程序/x-www-form-urlencoded数据,而是JSON。