1

我正在尝试使用下面的代码打印 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>
4

3 回答 3

1

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

于 2014-02-01T17:35:51.350 回答
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>
于 2014-02-01T17:44:17.707 回答
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();

这样,您的一个请求就完成了(失败/成功)。它会触发另一个请求,依此类推..

于 2014-02-01T17:44:57.570 回答