【问题标题】:ajax post success parse jsonajax发布成功解析json
【发布时间】:2012-03-28 09:00:37
【问题描述】:

抱歉,问题太长了。我正在尝试 ajax 发布以收集联系人位置历史记录,然后将标记添加到地图中。

ajax post返回位置数据json编码如下:

[{"name":"Chris","data":{"user":"447967048843","data":[{"timestamp":1332840872,"longitude":-1.549517,"latitude":53.973174},{"timestamp":1332841510,"longitude":-1.444133,"latitude":53.997148}]},"contacts":null},{"name":"Jason","data":{"user":"447879896697","data":[{"timestamp":1332839836,"longitude":-1.566667,"latitude":53.978533},{"timestamp":1332840447,"longitude":-1.567654,"latitude":53.977927}]},"contacts":null}]

这里是 getHistory 函数,在选择联系人后提交表单时调用。

function getHistory() {
    var contact = $("#contact").val()
    var days = $("#days").val()
    $.ajax({
        type: 'post',
        url: 'temp_history.php',
        data: {contact: contact, days: days},
        context: document.body,
        beforeSend: function() {
        },
        success: function(succ){
            var obj = jQuery.parseJSON(succ);
            var divs="",tabs="",counts=0;
            jQuery("#gMap").gmap3({
                action: 'clear'});
                jQuery(".marker").remove();
                jQuery.each(obj,function(i,item){
                tabs +=item.contacts;
                if(item.data.latitude != null && item.data.longitude!=null)
                    {
                    addMarker(item.name, item.data.timestamp,item.data.latitude,item.data.longitude,item.data.user_id);
                    }
            });
        }
  });

}

我认为问题是我需要嵌套 jQuery.each 函数但不确定如何嵌套?

addMarker 函数是:

 function addMarker(name, timestamp, lati, longi, user_id) {
    jQuery("#gMap").gmap3({
        action: 'addMarkers',
        markers:[
        {lat:lati, lng:longi, data:name}
        ]
    }); 

}

谢谢

【问题讨论】:

  • 您是否尝试过在 Firebug 中单步执行代码?
  • 什么不起作用?你检查过萤火虫中的警告/错误吗?
  • 没有错误,也没有标记。看起来 json 数据是多维数组,所以我需要更新函数以适应,知道怎么做吗?

标签: php jquery ajax


【解决方案1】:

您是对的 - 您的 JSON 遍历不正确,请在您的 success 处理程序中尝试此操作:

success: function(data){
    var json = jQuery.parseJSON(data); // If you're returing json, this shouldn't be required
    var divs = "", tabs = "", counts = 0;

    jQuery("#gMap").gmap3({ action: 'clear' });
    jQuery(".marker").remove();

    jQuery.each(json, function(i, item) {
        var name = item.name;
        var userId = item.data.user;
        jQuery.each(item.data.data, function(i, nav) {
            var ts = nav.timestamp;
            var lat = nav.latitude;
            var long = nav.longitude;

            if (lat != null && long != null) {
                addMarker(name, ts, lat, long, userId);
            }
        });
    })  
}

此外,让 JSON 中的对象名称更具语义化是值得的,尤其是当您在多个级别中列出了 data 时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2018-10-19
    • 1970-01-01
    相关资源
    最近更新 更多