2012-03-28 3 views
1

извините за длинный вопрос. Я пытаюсь сделать ajax сообщение, чтобы собрать историю позиций контактов, а затем добавить маркеры на карту.ajax post успех parse json

Аякса сообщение возвращает 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} 
     ] 
    }); 

}

Спасибо

+0

Вы пробовали переходить через код в Firebug? – McGarnagle

+0

Что не работает? вы проверили наличие предупреждений/ошибок в firebug? – maialithar

+0

ошибок нет, но также нет меток. Похоже, что данные json - это многомерный массив, поэтому мне нужно обновить функцию в соответствии, любая идея как? –

ответ

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); 
      } 
     }); 
    }) 
} 

Кроме того, было бы целесообразно сделать имена объектов в y наш JSON более семантический, особенно, поскольку у вас есть data, перечисленные на нескольких уровнях.

+0

Это отлично работает, спасибо за ваше время. –

Смежные вопросы