2011-03-25 57 views
5

真的很簡單的問題。我想測試我正在開發一個RESTful Web服務,並有(使用jquery)這個簡單的Ajax調用:簡單的阿賈克斯調用似乎是阻止

<script type="text/javascript"> 
    $(document).ready(function() { 
    var url = '/index.php/gettest/reallyLongRequest';  
    $.ajax({ 
     url: url, 
     dataType:'text', 
     success:function(data) { $('#result').html(data);}, 
     error:function(xhr,err,e) { alert ("Error: " + err);} 
    });     
    }); 
</script> 

這將運行在頁面加載時。當它運行時,頁面被阻塞;即(我可以看到鼠標指針旁邊的沙漏),不能處理其他用戶動作。 (順便說一句,這個特殊的請求 - 故意 - 需要很長時間才能返回)。

這是爲什麼? (異步)JAX權利?很明顯,我正在犯一個初學者的錯誤。有什麼想法嗎?

當我嘗試這個使用普通的JavaScript(沒有庫),它按預期工作。這是否與Jquery處理xhr onreadystatechange有關?

謝謝你的期待。

編輯:多人建議設置async:true,正如它發生,是jquery中的默認設置,因此沒有任何效果。

編輯:如前所述,如果我使用普通的javascript,並啓動此計時器,例如,window.setInterval(function() { startLongPoll(); }, 5000) 它按預期更新,而不會出現阻止。想法,任何人?

+0

我沒有,如果這是有關線索,但你有沒有嘗試在不同的瀏覽器? – 2011-03-25 20:52:31

+0

它發生在所有瀏覽器中。 – 2011-03-25 21:27:31

+1

看起來像我以前的陳述是不真實的;經過進一步檢查,它只發生在谷歌瀏覽器。有任何想法嗎? – 2011-03-29 23:15:41

回答

3

這裏是我做過什麼來解決這個問題的例子:

jQuery(document).ready(function() { 
    setTimeout(function() { 
    $.getJSON("veryLongRequest", function(json) { 
    alert("JSON Result: " + json[0].id);}); 
    }, 500); // You may need to adjust this to a longer delay. 
}); 

注:我使用的是速記jQuery的方法「的getJSON」,這是對AJAX調用的包裝數據類型設置爲「json」。但是,這個解決方案將適用於所有的Ajax請求。

參考:

Stop the browser "throbber of doom" while loading comet/server push iframe

-3

可能要嘗試並添加async:true

<script type="text/javascript"> 
     $(document).ready(function() { 
     var url = '/index.php/gettest/reallyLongRequest';  
     $.ajax({ 
      url: url, 
      async:true, 
      dataType:'text', 
      success:function(data) { $('#result').html(data);}, 
      error:function(xhr,err,e) { alert ("Error: " + err);} 
     });     
     }); 
    </script> 
+0

快速畫出你。 – RSG 2011-03-25 20:53:59

+2

async默認爲true。爲什麼這會有所幫助? – 2011-03-25 20:55:50

+0

@Chris Kooken,JB Nizet說,默認情況下,異步是真實的。可以肯定的是,我確實嘗試過,但仍然存在相同的問題。任何其他想法? – 2011-03-25 21:26:44

0

我認爲這應該默認爲真,但嘗試添加async: true到你的Ajax JSON參數。

0

以下代碼是否按預期工作?

<script type="text/javascript"> 
    //$(document).ready(function() { 
    var url = '/index.php/gettest/reallyLongRequest';  
    $.ajax({ 
     url: url, 
     dataType:'text', 
     success:function(data) { $('#result').html(data);}, 
     error:function(xhr,err,e) { alert ("Error: " + err);} 
    });     
    //}); 
</script> 
+0

不幸的是,它沒有。同樣的問題。 (還是)感謝你的建議。另請參閱我的最新編輯 – 2011-03-26 00:11:56