簡體   English   中英

連續運行getJSON函數的問題

[英]Issue with continuously run of getJSON function

我正在嘗試使用以下代碼打印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>

您可以執行while(true)來運行無限循環。 我可視化了該對象,沒關系。 因此,您為Google獲得了一個結果。 現在,您嘗試使用該代碼對Yahoo進行DDOS攻擊。 試圖為每個cpu周期獲取數據非常瘋狂,雅虎會注意到這一點並阻止您,因為您非常消耗它們的資源。 您最好使用setInterval函數進行ajax調用。 它可能在1到5秒之間變化。 我不知道此api是否有限制。

請記住,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>

您正在以非常錯誤的方式進行操作!!!

您在此處編寫的代碼將無限期地開始向服務器發送請求。 因此,您在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();

這樣,您的一個請求已完成(失敗/成功)。 它將觸發另一個請求,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM