2013-12-12 4 views
0

Я использую следующий код, чтобы вытащить некоторые данные о пробеге из Матрицы расстояний Google Maps. Проблема в том, что он возвращается как простой javascript. Мне удалось получить его поместить данные в яваскрипта массив, так что у меня есть:Сделать массив Jquery из массива javascript

arrResults[0] 
arrResults[1] 
arrResults[2] 
arrResults[3] 

Но я хочу использовать массив в Jquery сейчас, но не могу работать, как преобразовать его в массив JQuery? ,

$(document).ready(function() { 
     $("#submit").click(function() { 
     $("#my_map").gmap3({ 
     getdistance:{ 
     options:{ 
      origins:["pe219px","ng323rj"], 
      destinations:["pe219px","ng323rj"], 
      travelMode: google.maps.TravelMode.DRIVING, 
      unitSystem: google.maps.UnitSystem.IMPERIAL 
     }, 
     callback: function(results, status){ 
      var html = ""; 
      var arrResults = []; 
      if (results){ 
      for (var i = 0; i < results.rows.length; i++){ 
       var elements = results.rows[i].elements; 
       for(var j=0; j<elements.length; j++){ 
       switch(elements[j].status){ 
        case "OK": 
        var sd=$(this).text(); 
        html += parseInt(elements[j].distance.text) + "<br />"; 
     arrResults.push(elements[j].distance.text); 

        break; 
        case "NOT_FOUND": 
        html += "The origin and/or destination of this pairing could not be geocoded<br />"; 
        break; 
        case "ZERO_RESULTS": 
        html += "No route could be found between the origin and destination.<br />"; 
        break; 
       } 
       } 
      } 
      } else { 
      html = "error"; 
      } 
      $("#my_map").html(html); 
     } 
     } 
    }); 
     }); }); 
    </head> 

    <body> 
    <div id="my_map"></div> 
    <p><a id="submit" href="#">Submit</a></p> 
+0

jQuery _is_ JavaScript - что вы спрашиваете? –

+0

Что такое массив jQuery? Что вы ожидаете от массива? – Andrew

+0

Он хочет объект для ассоциативного доступа к значениям, я бы предположил? – SquareCat

ответ

0

Это немного более проблематично, потому что вы используете gmap3 плагин, но вот как я бы подойти к решению проблемы.

Первое: отредактированное (см изменений для более подробной информации)

Во-вторых, сделать arrResults доступной во всем мире своим функциям, объявив его в верхней части IIFE. Не обновляйте его нигде.

В-третьих, выделите свою логику обратного вызова из функции ajax в новую функцию. Это упрощает чтение кода. Что-то вроде processData().

В-третьих, как только AJAX будет завершен, и ваша функция processData закончит свой прогон, используйте jQuery, чтобы добавить новую кнопку #viewresults на свою страницу.

$('body').append('<input id="viewresults" type="submit" value="View results"/>') 

Вы делаете это, потому что AJAX является asyncronous. Нажатие кнопки viewresults до сбора данных приведет либо к ошибке, либо к нулю, поэтому имеет смысл (по крайней мере, для вашего кода), чтобы кнопка была доступна только после того, как данные будут доступны.

Я представил краткое изложение этих мыслей в this jsfiddle (непроверенный, но должен дать вам несколько подсказок). Надеюсь, вы сочтете это полезным.

+0

Энди, уже существует '$ (document) .ready (function() {...})' wrapper, который должен быть рассмотрен, по крайней мере, перед созданием выделенной оболочки. –

+0

Вы правы. Просто привык делать это именно так, потому что у меня обычно есть код не-jQuery в моих приложениях, прежде чем я начну использовать jQuery. Исправлена ​​эта часть вопроса. – Andy