这个json响应有什么问题?

时间:2017-09-14 11:04:29

标签: jquery json ajax

我已将接受的答案复制到问题How do I return a proper success/error message for JQuery .ajax() using PHP?

我的PHP脚本返回以下json。标头是正确的:PHP脚本输出中的Content-type: application/jsonjson_encode()

{"success":"success"}

但检查状态的jquery无效:

$.ajax({
        type: "POST",
        url: '/ajax/index',
        data: $("#NewsletterSignup").serialize(), 
        success: function(data)
        {
            console.log(data);
            if (data.success == 'success') {
                console.log('successful');
            } else if(data.errors){
                console.log('error occurred');
            }
        }
    });

所以我得到了console.log(data),它给出了{"success":"success"}。但那时它并没有评估if...else if条件。为什么呢?

jquery版本是1.12.3

3 个答案:

答案 0 :(得分:1)

从php文件中你需要将其编码为

json_encode({"success":"success"});

应该期待dataType:'json'

答案 1 :(得分:1)

将dataType添加到您的ajax代码中,如下所示:

$.ajax({
    type: "POST",
    url: '/ajax/index',
    data: $("#NewsletterSignup").serialize(), 
    dataType:'json,'    //  CHECK THIS....
    success: function(data)
    {
        console.log(data);
        if (data.success == 'success') {
            console.log('successful');
        } else if(data.errors){
            console.log('error occurred');
        }
    }
});

答案 2 :(得分:0)

那是因为你的php服务器将响应作为纯文本而不是json。查看标题Content-Type: text/html。您的服务器需要使用Content-type: application/json作为json发送标头。

<?php
  $data = /** whatever you're serializing in array **/;
  header('Content-Type: application/json');
  echo json_encode($data);

或者,如果响应在plain text中,则可以在客户端(javascript)中解析对json的响应。这样做:

$.ajax({
    type: "POST",
    url: '/ajax/index',
    data: $("#NewsletterSignup").serialize(), 
    success: function(data)
    {
        data = JSON.parse(data); 
        console.log(data);
        if (data.success == 'success') {
            console.log('successful');
        } else if(data.errors){
            console.log('error occurred');
        }
    }
});

此外,您可以使用dataType:'json'选项在jquery ajax中获得json响应。