【问题标题】:JSON parse data in javascript from phpJSON从php解析javascript中的数据
【发布时间】:2012-11-14 22:30:56
【问题描述】:

我正在尝试使用 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 恢复数据,但没有积极的结果。

【问题讨论】:

  • 不要在success 函数中使用JSON.parse。给你的$.ajax 属性dataType: 'json' 然后console.log JSON 响应,看看你是否得到一个空值或具有属性的对象。如果你得到一个空值,那么你的 PHP 脚本中的数据有问题。
  • 也可以尝试将exit(); 放在json_encode() 函数之后
  • 我的 JSON 数据是: [{"item":{"id_locale":"50","latitudine":"44.4794995","longitudine":"11.364192099999968"}}] 在 JSON lint json文件没问题
  • 添加 exit(),不工作,现在我尝试使用 console.log
  • 如果您在 jQuery AJAX 调用中指定 dataType: 'json',那么在您的 PHP 脚本中执行 return $items; 而不是 echo json_encode($items); 就足够了。

标签: javascript php json parsing


【解决方案1】:

应该这样做。

$.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 给出了您上面提到的响应,那就没问题了。

【讨论】:

  • 如何取参数?
  • 你没有在你的问题中传递任何参数,但我让这个区域保持开放,因为我几乎总是传递一些东西。它们将采用数组格式。更简单;评论在哪里,您可以传递逗号分隔的数据,例如name:value, name2:value2
【解决方案2】:

我认为你应该更多地寻找从 php 文件中获取的数据。绝对这是一个解析错误,并且必须缺少一些括号/其他内容,最终不会使返回的数据成为 json 可解析字符串。

【讨论】:

    【解决方案3】:

    稍作修改应该没问题:

    $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',则不需要json_encode PHP 响应...这就是我在许多项目中使用它的方式...
    • 我以前从未听说过。也许我会尝试一下。我认为 PHP 响应只是 Array()
    • 不同之处在于我使用return $items;而不是回显json字符串...所以任何数组或对象都可以直接传递给AJAX调用作为响应...
    • 所以你说 PHP 自动将数组编码为 JSON 格式。我不知道。无论使用什么类型的字符,它都会序列化数组?
    • @NappingRabbit 抱歉,我看到了框架和基本控制器类。它检查请求是否来自 AJAX(调用包含参数 async=1),在这种情况下,它会从调用的操作(在我的情况下为 return)中获取响应并回显它 json_encoded... 抱歉,我的错。
    【解决方案4】:

    数据 $.ajax({ 类型:“POST”, 数据类型:json, url:"Locali.php", 成功:功能(数据){ 对于(我在数据中){ 点 = 新 google.maps.LatLng(json[i].item.latitudine,json[i].item.longitudine); 警报(点);
    } } })

    就这样试试吧。

    【讨论】:

    • 变量json没有定义(当变量point),你写的返回变量是data
    【解决方案5】:

    是的,试试吧

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多