简单的ajax调用似乎是阻塞的

met*_*att 7 javascript ajax jquery xmlhttprequest

真的很简单的问题.我试图测试我正在开发的Restful webservice,并进行这个简单的ajax调用(使用jquery):

 <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>
Run Code Online (Sandbox Code Playgroud)

这在页面加载时运行.当它正在运行时,页面正在阻塞; 即,(我可以看到鼠标指针旁边的沙漏)没有其他用户操作可以处理.(顺便说一句,这个特殊的获取请求 - 故意 - 需要很长时间才能返回).

为什么是这样?一个(异步)JAX对吗?显然我犯了一个初学者的错误.请问有什么想法吗?

当我使用普通的javascript(没有库)尝试这个时,它按预期工作.这是否与Jquery处理xhr onreadystatechange有关?

谢谢你的期待.

编辑:多人建议设置async:true,它发生时,是jquery中的默认值,因此没有任何效果.

编辑:如前所述,如果我使用普通的javascript并用计时器启动window.setInterval(function() { startLongPoll(); }, 5000) 它,例如,它按预期更新,而不会出现阻塞.想法,有人吗?

met*_*att 4

这是我为解决该问题所做的示例:

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.
});
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是简写 jquery 方法“getJSON”,它是数据类型设置为“json”的 ajax 调用的包装器。然而,这个解决方案适用于所有 ajax 请求。

参考:

加载 Comet/服务器推送 iframe 时停止浏览器“厄运的悸动”