Запрос .getJSON никогда не завершается - PullRequest
0 голосов
/ 03 сентября 2011

У меня проблема с тем, что запрос .getJSON не выдает никаких ошибок или чего-либо еще, он успешно входит в функцию обратного вызова (которая сообщает мне, что запрос выполнен успешно, да?), Но никогда не завершается. Вся функция обратного вызова выполняется, данные читаются правильно, но никогда не завершаются.

функция getResult (опция) {

     console.log("inside getResult");
        $.getJSON(yql, function(data){
          console.log("inside getJSON");
          var directions = '';
          $(data.query.results.div).each(function(i,element){
            htmlimg=(typeof(element.img) != 'undefined') ? '<img src="'+element.img.src+'" alt="'+element.img.alt+'">' : '';
            switch(typeof(element.p)){
              case 'undefined':
                htmlp = '';
                break;
              case 'string':
                if(element.p == 'Alternative routes:'){
                  //end looping
                  return false;
                }
                htmlp = '<p>' + element.p + '</p>';
                break;
              case 'object':
                function showhtmlp(element){
                  var s = '';
                  if(typeof(element.content != 'undefined')){
                    s += element.content;
                  }
                  if(typeof(element.a) != 'undefined'){
                    s += element.a.content;
                  }
                  if(typeof(element.br) != 'undefined'){
                    s+='<br>';
                  }
                  return s
                }

                htmlp = '<p>';
                if(typeof(element.p[0]) != 'undefined'){
                  $(element.p).each(function(i, data){
                    htmlp += showhtmlp(data);
                  });
                } else {
                  htmlp += showhtmlp(element.p);
                }
                htmlp += '</p>';
                break;
            }
            directions += '<div>'+htmlimg+htmlp+'</div>';
    console.log("Directions: ");
    console.log(directions);
          });
    console.log("OUT OF DIRECTIONS EACH FUNCTION/LOOP");
          directions += '<div><a href="' + data.query.diagnostics.url.content + '" target="_blank" title="See on Google Maps"><img src="images/link.png" alt="Link" class="smallicon">View trip on Google Transit</a></div>';
    console.log("step1");
          trip.transit.routes[option].directions = directions;
    console.log("step2");
          $('#transitoption'+option).html(directions);
    console.log("step3");
        });//end of .getJSON
    console.log("out of JSON");
      }//end of getResult?
    console.log("out of Result");
      getResult(option);

распечатана команда console.log "before end". Ошибки не выбрасываются. Тем не менее, он никогда не достигает console.log «из JSON».

Когда я попытался использовать консоль для отладки, я увидел, что она застряла в части кода jquery.min.js, которая, будучи свернутой, я могла сказать, что в ней есть такие слова, как «abort» и «timeout».

Я относительно новичок в запросах ajax, поэтому, пожалуйста, будьте очень конкретны.

переменная yql:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fmaps.google.com%2Fm%2Fdirections%3Fsaddr%3D37.78414%2C%2B-122.44108%26daddr%3D37.61688%2C%2B-122.38400999999999%26dirflg%3Dr%26ri%3D0%26date%3D2011-09-02%26time%3D9%3A21pm%22%20and%20xpath%3D'%2F%2Fdiv%2Fdiv'&format=json&diagnostics=true

1 Ответ

1 голос
/ 03 сентября 2011

Вы понимаете, что вызов JSON является асинхронным.Это означает, что когда вы вызываете getJSON, вы просто инициируете вызов ajax.Эта функция вернется немедленно (и вы должны увидеть «вне JSON» сразу перед любым другим оператором (если только у вас нет ошибок JS). Затем, когда вызов ajax завершится успешно, вы должны увидеть «внутри getJSON» и «передend "из функции обработчика успеха. Если вы не видите их, то у вас могут быть ошибки javascript где-то, которые останавливают выполнение. Вы должны проверить консоль ошибок или консоль отладчика, чтобы найти ошибки JS.

Я предполагаю, что либо вы не понимаете порядок, в котором все происходит, и это сбивает вас с толку, либо у вас есть ошибки JS, которые останавливают выполнение.

Это также поможет нам определить проблемы, если вы опубликуете целоекод для вашего вызова getJSON.

...