2011-05-06 51 views
2

我用jQuery做了一个AJAX函数。该功能的正常使用,以及服务器返回一个JSON,但我不能在我的JS脚本使用它AJAX调用后检索JSON的问题

服务器端:

$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,但如果我尝试用解析它,它不起作用,并且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"} 

编辑

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

+0

在[解决方案]之前询问类似的问题(http://stackoverflow.com/questions/631418/jquery-getjson-ajax-parseerror)检查了这一点。希望这有助于 – 2011-05-06 09:14:28

+0

我真的不明白为什么jQuery会抛出这个错误; '{“count”:“358”}'是完全有效的。 – 2011-05-06 14:32:27

+0

我可以发送一个关联数组而不是JSON吗?如果我这样做,我不会有与JSON的问题;) – Elorfin 2011-05-09 08:18:26

回答

0

输出缓冲区没有空,所以AJAX接收缓冲区内容+ JSON,所以它不是一个有效的JSON。

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

0

jQuery.ajax

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

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

+0

我只是发现'dataType:“json”'出错:我无法执行函数'success'。当我尝试'alert(data.count)'时,它是'undefined',所以我认为它不是解析。 – Elorfin 2011-05-06 09:42:54

+0

@Corum:然后添加一个'error'回调函数,看看错误是什么。 – 2011-05-06 12:01:08

+0

如果我指定'dataType:“json”',那么后面的代码不会被执行。如果我删除这行,并用Firebug侦听'jQuery.parseJSON(data)',我有错误'无效的JSON:[{“count”:“358”}]' – Elorfin 2011-05-06 13:41:56

1

试试这个:

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

alert(json.count); 

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

+0

是的,我忘记了数据引用,但是如果我尝试添加这个。我有一个错误在萤火虫'JSON.parse [stopper sur une erreur](function(a,b){function cw(a){return f ... a:a +“px”)}}),a.jQuery = a。$ = f})(window);' – Elorfin 2011-05-06 09:52:56

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。

0

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

+0

阅读代码,我使用它;) – Elorfin 2011-05-10 07:22:33