2011-05-05 86 views
1

我目前使用幾個API從其他站點提取數據。然而,有時這些API速度非常慢(特別是Twitter),並且該腳本將繼續運行,因爲Twitter從不響應。如果在5秒內沒有完成停止JavaScript函數(jQuery)

我的問題是我怎麼能告訴函數停止IF和只有如果它還沒有在x秒內完成?我假設這與setTimeout()有關,但我無法弄清楚。

下面是來自雅虎天氣API一些示例代碼:

<script type="text/javascript"> 
    $(function() { 

     $.simpleWeather({ 
      zipcode: '<?= $property_zip ?>', 
      unit: 'f', 
      success: function(weather) { 
       //success 
      }, 
      error: function(error) { 
       $("#weathercontent").html('<p>'+error+'</p>'); 
      } 
     }); 
    }); 
</script> 

感謝, 菲爾

+0

您是否獲得了推文的JSONP?你可以在jQuery中使用超時。 – alex 2011-05-05 01:32:49

+0

無論如何,瀏覽器會關閉長時間運行的功能。所以我想知道你是如何做到的。您能否提供一些代碼(請僅提供相關部分),以便我們瞭解我們如何提供幫助。 – 2011-05-05 01:34:05

+0

@Robert Koritnik我把一些代碼了..讓我知道如果這有幫助 – psarid 2011-05-05 01:46:32

回答

1

您可以將所有jQuery AJAX請求的全局超時設置爲5秒。我相信這也包括自jQuery 1.5以來的JSONP請求,但它可能是值得研究的。

您可以在設置超時的情況下設置單個處理程序。它可能基於傳出請求的URL。因此,對於所有撥打雅虎,Flickr或Twitter的電話,您都可以設置超時時間。在發送每個AJAX請求之前,下面的預過濾器將運行,並且有機會在發送之前完全修改請求。

jQuery.ajaxPrefilter(function(options) { 
    if (options.url is not going to my server) { // pseudocode :) 
     options.timeout = 5000; 
    } 
}); 

如果你不想一個全球性的處理,然後在每個$.ajax({ .. })叫你正在設置timeout屬性。對於第三方插件(如simpleWeather),這可能會產生問題,如果您明確設置了超時時間,則必須修改源代碼。

+0

我可以這樣做只有少數幾個功能? – psarid 2011-05-05 01:53:27

+0

@user - 是的,你可以選擇性地做。我爲此增加了一個例子。 – Anurag 2011-05-05 01:56:59

+0

@ user628596:最簡單的方法是設置'$ .ajax'選項的超時時間,但是如果你發現這個限制,你仍然可以使用其他方法來設置你自己的定時器(按你的意願工作)並使用XHR請求對象上的'.abort()'函數。只是讓你知道還有其他的方法。 – 2011-05-05 08:33:18

0

你的意思是你怎麼能夠取消Ajax請求,如果服務器響應速度很慢?我相信這是myAjaxRequest.abort()。這與停止執行中的函數不同。我不確定有辦法做到這一點。