Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t将接收到的JSON解码到数组_Javascript_Php_Json_Ajax_Post - Fatal编程技术网

Javascript Can';t将接收到的JSON解码到数组

Javascript Can';t将接收到的JSON解码到数组,javascript,php,json,ajax,post,Javascript,Php,Json,Ajax,Post,JS 序列化表单中的数据,将其字符串化,并使用AJAX将其作为JSON发布到update.php jQuery.fn.serializeObject = function () { var formData = {}; var formArray = this.serializeArray(); for(var i = 0, n = formArray.length; i < n; ++i) formData[formArray[i].name] = formArra

JS

序列化表单中的数据,将其字符串化,并使用AJAX将其作为JSON发布到update.php

jQuery.fn.serializeObject = function () {
  var formData = {};
  var formArray = this.serializeArray();

  for(var i = 0, n = formArray.length; i < n; ++i)
    formData[formArray[i].name] = formArray[i].value;

  return formData;
};

$(function() {
    $('form').submit(function() {
        data = $('form').serializeObject();
        alert(JSON.stringify(data));   
        $.ajax({
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            url: 'inc/update.php',
            data: {json: JSON.stringify(data)},
            dataType: 'json'
        });  
    });
}); 
使用Firefox中的Tamper Data插件,我检查了POSTDATA,它是:

json=%7B%22name%22%3A%22fff%22%7D
这就像:

json={"name":"fff"}
我是JS/AJAX/JSON新手,我找不到我的错误。所以请帮帮我

我搜索了好几个小时都没有成功。

不知道编写
serializeObject
函数有什么意义,因为你可以直接使用
serializeArray

Javascript:

$(function() {
    $('form').submit(function(e) {
        e.preventDefault(); // Stop normal submission, which is probably why your PHP code isn't working
        data = $('form').serializeArray();
        alert(JSON.stringify(data));   
        $.ajax({
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            url: 'inc/update.php',
            data: {
                json: JSON.stringify(data)
            },
            dataType: 'json'
        });  
    });
    return false;
});
PHP:

如果使用
true
作为
json\u decode
中的第二个参数,它将返回一个数组而不是对象。 所以你需要这样做

$name = $response['name'];

我在我们的帮助下发现了问题:JSON字符串不正确

逐步解释:

$str_json = file_get_contents('php://input');
echo $str_json;//json%3D%5B%7B%22name%22%3A%22Max%22%2C%22value%22%3A%22testvalue%22%7D%5D

$str_json = urldecode($str_json);
echo $str_json;//json=[{"name":"Max","value":"testvalue"}]

$str_json = str_replace('json=', '', $str_json);
echo $str_json;//[{"name":"Max","value":"testvalue"}]

//now it is a json-string which can be json_decoded
$arr_json = json_decode($str_json, true);
$name = $arr_json['name'];
echo $name;//Max

谢谢大家

第二个解码参数=true-我试过$name=$response['name'];但是不起作用:(-second decode参数已经是真的了我只是想指出你已经把你的第二个参数设置为真的现在我明白了,谢谢:-)我已经用这些代码交换了我的代码。我不知道。发布的json现在看起来像[{“name”:“name”,“value”:“testvalue”}]。但我无法解码。@Luk4s
error\u reporting(E\u ALL)$name = $response['name'];
$str_json = file_get_contents('php://input');
echo $str_json;//json%3D%5B%7B%22name%22%3A%22Max%22%2C%22value%22%3A%22testvalue%22%7D%5D

$str_json = urldecode($str_json);
echo $str_json;//json=[{"name":"Max","value":"testvalue"}]

$str_json = str_replace('json=', '', $str_json);
echo $str_json;//[{"name":"Max","value":"testvalue"}]

//now it is a json-string which can be json_decoded
$arr_json = json_decode($str_json, true);
$name = $arr_json['name'];
echo $name;//Max