持续运行getJSON函数的问题

时间:2014-02-01 17:20:59

标签: javascript json getjson jqxhr

我正在尝试使用以下代码打印Google最后一句话。 问题是它只打印1个引号,似乎它停止运行。 这可能是个问题? 谢谢 丹尼

<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>

3 个答案:

答案 0 :(得分:1)

你可以while(true)运行无限循环。我想象了对象,没关系。所以你有一个谷歌的结果。现在,您尝试使用该代码对yahoo进行 DDOS 攻击。试图获取每个cpu周期的数据是疯了,雅虎注意到并阻止你,因为你非常吃他们的资源。您最好使用 setInterval 函数来执行ajax调用。它可能在1到5秒之间变化。我不知道这个api是否有限制。

答案 1 :(得分:0)

请记住,AJAX调用是异步,因此您基本上会对该网址发出无限请求!
它可能会在几秒钟后挂起你的浏览器,使用超时并在前一个完成时再次执行该功能,如下所示:

<!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>

答案 2 :(得分: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();

这样您的一个请求就完成了(失败/成功)。它会触发另一个请求等等。