用JavaScript从PHP解析JSON数据

3
我正在尝试使用json从php文件中的javascript文件检索数据。
$items = array(); 
while($r = mysql_fetch_array($result)) { 
    $rows = array( 
        "id_locale" => $r['id_locale'], 
        "latitudine" => $r['lat'], 
        "longitudine" => $r['lng'] 
    ); 
    array_push($items, array("item" => $rows)); 
} 
ECHO json_encode($items);

在JavaScript文件中,我尝试使用ajax调用来恢复数据:
$.ajax({
    type:"POST",
    url:"Locali.php",
    success:function(data){
        alert("1");
        //var obj = jQuery.parseJSON(idata);
        var json = JSON.parse(data);
        alert("2");
        for (var i=0; i<json.length; i++) {
            point = new google.maps.LatLng(json[i].item.latitudine,json[i].item.longitudine);
            alert(point);
        }
    }
})

第一个提示框被打印出来了,但后面的没有,它会给我一个错误:Unexpected token <.... 但我不明白这是什么意思。

有人知道我错在哪里吗?

我还尝试使用jquery恢复数据,但没有任何积极的结果。


1
不要在你的“success”函数中使用“JSON.parse”。给你的“$.ajax”属性dataType: 'json',然后console.log JSON响应以查看是否获得了一个空值或具有属性的对象。如果你得到了一个空值,那么你的PHP脚本中的数据就有问题。 - N.B.
json_encode()函数之后尝试加入exit(); - Muthu Kumaran
我的 JSON 数据是:[{"item":{"id_locale":"50","latitudine":"44.4794995","longitudine":"11.364192099999968"}}] 在 JSON lint 中,JSON 文件是正常的。 - Stefania
添加 exit() 不起作用,现在我尝试使用 console.log。 - Stefania
如果您在jQuery AJAX调用中指定了dataType: 'json',则在您的PHP脚本中执行return $items;即可,而无需执行echo json_encode($items); - shadyyx
显示剩余2条评论
5个回答

0

应该可以了。

$.post("Locali.php",{
    // any parameters you want to pass
},function(d){
    alert("1");
    for (var i=0; i<d.length; i++) {
      point = new google.maps.LatLng(d[i].item.latitudine,d[i].item.longitudine);
      alert(point);
    }
}, 'json');

如果PHP能够返回您上述提到的响应,那就很好。


我该如何获取参数? - Stefania
你在问题中没有传递任何参数,但我留下了这个区域,因为我几乎总是会传递一些东西。它们将以数组格式存在。更简单的方法是,在注释处,你可以传递逗号分隔的数据,如 name:value, name2:value2 - NappingRabbit

0

数据 $.ajax({ type:"POST", dataType: json, url:"Locali.php", success:function(data){ for (i in data) { point = new google.maps.LatLng(json[i].item.latitudine,json[i].item.longitudine); alert(point);
} } })

试着这样做。


变量json未定义(在创建变量point时),请返回你所写的变量为data - NappingRabbit

0

你应该对这些轻微的修改感到满意:

$items = array(); 
while($r = mysql_fetch_array($result)) { 
    $items[] = array( 
        "id_locale" => $r['id_locale'], 
        "latitudine" => $r['lat'], 
        "longitudine" => $r['lng'] 
    ); 
} 
echo json_encode($items);

还有jQuery:

$.ajax({
    type:"POST",
    dataType: 'json',
    url:"Locali.php",
    success:function(data){
        console.log(data);
        for (var i=0; i<data.length; i++) {
            point = new google.maps.LatLng(data[i].item.latitudine,data[i].item.longitudine);
            alert(point);
        }
    }
})

如果您指定了 dataType:'json',则无需对 PHP 响应进行 json_encode...这是我在许多项目中使用的方式... - shadyyx
区别在于我使用return $items;而不是回显JSON字符串... 因此,任何数组或对象都会直接作为响应传递给AJAX调用... - shadyyx
所以你的意思是PHP会自动将数组编码为JSON格式。我不知道这一点。它无论使用什么类型的字符都会序列化数组? - NappingRabbit
1
@NappingRabbit 对于我的混淆表示抱歉 - 我查看了我们的框架和基础控制器类。它会检查请求是否来自 AJAX(调用包含参数 async=1),如果是,则从被调用的操作中获取响应(在我的情况下是 return),并将其 json_encode 后输出... 抱歉,是我的错误。 - shadyyx
@Stefania 抱歉,我的错,在 PHP 中你真的必须在结尾处使用 echo json_encode($items); 而不是 return。现在试试看... - shadyyx
显示剩余7条评论

0

我认为你应该更仔细地查看从php文件中获取的数据。肯定这是一个解析错误,可能缺少一些括号或其他东西,最终导致返回的数据不是一个可解析的json字符串。


-1

好的,试一下吧

for (var i=0; i<json[0].length; i++) {

因为你在那里有一个对象..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接