非常简单的问题。我试图测试我正在开发的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>
当页面加载时运行。当它正在运行时,页面正在阻塞;即,(我可以看到鼠标指针旁边的沙漏)没有其他用户操作可以处理。 (顺便说一句,这个特殊的获取请求 - 故意 - 需要很长时间才能返回)。
这是为什么?一个(异步)JAX对吗?显然我犯了一个初学者的错误。有什么想法吗?
当我使用普通的javascript(没有库)尝试这个时,它按预期工作。这是否与Jquery处理xhr onreadystatechange有关?
感谢您的关注。
编辑:多人建议设置async:true,它实际上是jquery中的默认值,因此没有效果。
编辑:如前所述,如果我使用普通的javascript并使用计时器启动,例如window.setInterval(function() { startLongPoll(); }, 5000)
它按预期更新,而不会阻止。想法,任何人?
答案 0 :(得分: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.
});
注意:我使用的是简写的jquery方法,“getJSON”,它是ajax调用的包装器,数据类型设置为“json”。但是,此解决方案适用于所有ajax请求。
引用:
Stop the browser "throbber of doom" while loading comet/server push iframe
答案 1 :(得分:0)
我认为这应该默认为true,但尝试将async: true
添加到您的ajax json参数中。
答案 2 :(得分: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>
答案 3 :(得分:-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>