在AJAX调用后检索JSON的问题

时间:2011-05-06 09:07:52

标签: php jquery ajax

我用jQuery创建了一个AJAX函数。该函数正常工作,服务器返回JSON,但我不能在我的JS脚本中使用它

服务器端:

$array = array();

$array["count"] = count($accounts_list)."";

    for($i=0; $i<count($accounts_list); $i++)
    {
        $account = $accounts_list[$i];

        $array["marker"]["name"] = $account->name;
        $array["marker"]["lat"] = $account->map_latitude;
        $array["marker"]["lon"] = $account->map_longitude;
    }

    echo json_encode($array);

客户方:

$.ajax({  
    type: "POST",  
    url: "index.php?module=cap_Maps&action=AddMarkers", 
    data: dataString, 
    dataType: "json",
    success: function(data) {
        if (data == "error"){
            $(".tr_legend").before("<tr><td colspan='2' id='error'><span class='error_maps'>Erreur lors du chargement des marqueurs</span><td><tr>");
        }
        else {
            alert(data);
                var obj = jQuery.parseJSON( data )
                alert (obj.count);
        }

    }  
});

JSON按服务器返回:

{"count":"371","marker":{"name":"WAMPFLER","lat":"49.02751610","lon":"2.10611230"}}

函数alert(data)返回我的JSON,但是如果我尝试使用jQuery.parseJSON( data )解析它,它就不起作用且alert(obj.count);无法打开。

修改

我添加了错误功能:

error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("XMLHttpRequest="+XMLHttpRequest.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
                },

发生错误:

XMLHttpRequest={"count":"358"}
textStatus=parsererror
errorThrown=Invalid JSON: {"count":"358"}

修改

如果我的AJAX中有contentType: "application/json",,我可以返回一个静态字符串,它被认为是json,但如果我尝试在我的服务器上执行其他php代码,AJAX会返回500 Internal server error

5 个答案:

答案 0 :(得分:1)

试试这个:

var json = jQuery.parseJSON('{"count":"371","marker":{"name":"WAMPFLER","lat":"49.02751610","lon":"2.10611230"}}');

alert(json.count);

也许你忘记给parseJSON一个字符串'。

答案 1 :(得分:0)

来自jQuery.ajax

  

json类型将获取的数据文件解析为JavaScript对象,并将构造的对象作为结果数据返回。

所以你不需要jQuery.parseJSON,因为已经解析了返回的字符串。

答案 2 :(得分:0)

而不是使用parseJson,你可以尝试使用eval。

$.ajax({  
    type: "POST",  
    url: "index.php?module=cap_Maps&action=AddMarkers", 
    data: dataString, 
    dataType: "text",
    success: function(data) {
        if (data == "error"){
            $(".tr_legend").before("<tr><td colspan='2' id='error'><span class='error_maps'>Erreur lors du chargement des marqueurs</span><td><tr>");
        }
        else {
            alert(data);
                var obj = eval(data);
                alert (obj.count);
        }

    }  
});

HTH。

答案 3 :(得分:0)

看起来您没有从服务器发送具有适当格式的JSON,尝试使用json_encode()函数。

答案 4 :(得分:0)

输出缓冲区没有为空,因此AJAX收到缓冲区内容+ JSON,因此它不是有效的JSON。

在输出我的JSON之前,我在服务器端使用ob_clean(),它解决了问题。