2014-02-01 4 views
1

Я пытаюсь распечатать последние цитаты Google с помощью приведенного ниже кода. Проблема в том, что она печатает только 1 цитату, и кажется, что она перестает работать. Что может быть проблемой? Благодаря ДэнниПроблема с непрерывным запуском функции getJSON

<script type="text/javascript"> 

$(document).ready(function(){ 

    var symbol = 'goog'; 

    var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"+symbol+"%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json"; 

    while (1 == 1) { 
     var jqxhr = $.getJSON(url, function (json) 
     { 
      var lastquote = json.query.results.quote.LastTradePriceOnly; 
      document.write("lastquote = " + lastquote + "<br>"); 
     }) 
      .done(function() { 
      document.write("success<br>"); 
      }) 
      .fail(function() { 
      document.write("error<br>"); 
      }) 
      .always(function() {S 
      document.write("complete<br>"); 
      }); 
    } 
}); 
</script> 

ответ

1

Вы можете сделать while(true) запустить бесконечный цикл. Я визуализировал объект, и все в порядке. Итак, у вас есть один результат для Google. Теперь вы пытаетесь сделать DDOS атакой на yahoo с помощью этого кода. Попытка получить данные для каждого цикла процессора безумна, yahoo замечает это и останавливает вас, потому что вы очень много едите свои ресурсы. Вам лучше использовать функцию setInterval, чтобы выполнить вызов ajax. Он может варьироваться от 1 до 5 секунд. Я не знаю, имеет ли этот api ограничения.

0

Обратите внимание, что AJAX-вызовы: асинхронный, поэтому вы в основном делаете бесконечные запросы на этот URL-адрес!
Это, вероятно, повесить ваш браузер в течение нескольких секунд, использовать тайм-аут и выполнить функцию снова, когда предыдущий закончил, как это:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
    </head> 

    <body> 
     <script type="text/javascript"> 

      $(document).ready(function(){ 

        var symbol = 'goog'; 

        var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22"+symbol+"%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json"; 

        ajaxRequest(url); 

        }); 


function ajaxRequest(url) { 
    var jqxhr = $.getJSON(url, function (json) 
      { 
      var lastquote = json.query.results.quote.LastTradePriceOnly; 
      document.write("lastquote = " + lastquote + "<br>"); 
      window.setTimeout(function() { ajaxRequest(url); }, 1000); 
      }) 
    .done(function() { 
      document.write("success<br>"); 
      }) 
    .fail(function() { 
      document.write("error<br>"); 
      }) 
    .always(function() { 
      document.write("complete<br>"); 
      }); 
} 
</script> 
    </body> 
</html> 
0

Вы делаете это очень неправильно !!!

Код, который вы здесь написали .. будет бесконечно начинать отправку запросов на сервер. Таким образом, ваш случай в пределах while(1==1) фактически выполняет блок за тысячу раз в секунду.

Вы действительно инициировали тысячи запросов мгновенно и $.getJSON(url, ...); как уже было сделано.

Вы должны отправить еще один запрос, когда один завершил, что-то так ...

function requestData(){ 
    $.getJSON(url) 
     .done(function(){ 
      // Do your stuff 
      // ... 
      // and call requestData again 
      requestData(); 
     }). 
     fail(function(){ 
      // Handle Errors 
      // ... 
      // and call requestData again 
      requestData(); 
     }); 
} 
// Call for first time. 
requestData(); 

Таким образом, один ваш один запрос завершен (не удалось/удалось). Он выпустит другой запрос и т. Д.

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

  • Нет связанных вопросов^_^