[英]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.