json_decode返回NULL,json_last_error抛出0

时间:2015-06-16 09:06:15

标签: php ajax json

我将一个带有4个单词的简单JSON数组传递给PHP。我想在序列化后将该数组存储在数据库中。由于它是一个Ajax调用,我只能通过json_encode调查任何回显的值,并在AJAX成功函数中提醒它们。

这是我的代码:

var jsonString = JSON.stringify(ans);
//if I alert jsonString - it shows the proper array
$.ajax({
    type: "POST",
    url: "script.php",
    data: jsonString, 
    cache: false,

    success: function(data){
        alert(data);
    },
    error: function(){
        alert("error");     
    }
});

这就是我在PHP中用数组做的事情:

$answerAr = json_decode($_POST['data']);
$answers = serialize($answerAr);

如果我回复json_encode$answerAr),它会在Ajax中发出NULL警告,$answers变成' N;'

Json_last_error返回0.

2 个答案:

答案 0 :(得分:1)

如果您直接向PHP发布数据,则必须使用php://input并解析该数据; JSON中给出的数据不是表单数据,也不会自动填充请求超级全局($_GET$_POST)。

$data = json_decode(file_get_contents("php://input"));

大多数框架都会透明地为您执行此操作,并使用其中的数据填充请求对象。您应该检查请求是否通过标头(Content-TypeAccept: application/json等)在正文中发送JSON数据

或者,您可以更改AJAX调用以为其提供数组键:

$.ajax({
  data: {data: jsonString},
  // etc
});

然后可以$_POST["data"]

访问

答案 1 :(得分:0)

将您的ajax数据属性更改为这样并尝试

  

数据:{json:jsonString}

在php脚本中你可以通过

访问它
  

$ answerAr = json_decode($ _ POST ['json']);