在document.ready阻止浏览器中调用ajax

时间:2011-12-19 06:11:52

标签: jquery ajax document-ready

我正在尝试使用document.ready中的jquery执行ajax.get。但是get似乎阻止了浏览器。

一个虚拟的例子: http://jsfiddle.net/gauravshah/HpfXL/

我正在尝试执行get on document.ready,结果将在服务器上生成大约15-17秒。所以在那之前浏览器似乎被阻止了。因为背景图像没有动画。

其次在IE 8中,浏览器会自动挂起,直到收到请求为止。

类似的问题:Simple ajax call seems to be blocking 建议使用延迟拨打电话,但为什么要使用延迟?我找不到合适的解决方案。

我的实际代码:(不确定是否有任何帮助)

$(document).ready(function(){
feat_id = "feat-2222"
$.post('/features/creator/get_existing/'+feat_id, {
        "url":url,
        'path':path,
        'parentURL':parentURL,
        'index':index
    },function(data){
        var new_id = $(data).attr('id')
        $(data).find('.featureLocation').html($(data).find('.featureLocation').html());
        $(obj).replaceWith(data)
    })
});

2 个答案:

答案 0 :(得分:1)

到达类似问题中公布的相同解决方案

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.
});

Simple ajax call seems to be blocking

答案 1 :(得分:0)

我怀疑这里发生的事情要多于“重”查询。 See this article用于改善javascript性能。 Javascript本身,特别是当我们加载像jQuery这样的库时,对浏览器来说可能“笨重”。添加您建议的查询,应用程序或网站的感知响应时间可能会对用户造成损害。

毫无疑问,如果无效地执行javascript文件会阻塞你的http加载,并且广泛滥用javascript文件。只加载必要的东西。仅加载缩小的文件。如果可能,结合起来。而且,load from CDN if you can.最后,要知道任何15秒的查询都会带来两难境地......查询会一直执行,直到完成后再显示信息。如果您正在进行特别繁重的查询,那么浏览器要么会阻塞,要么只是等到它有加载的东西。因此,请考虑攻击查询并自行显示模式。

根据上面文章的教导我确定我的Javascript被有效地调用后,我会停下来看一下并考虑我的Ajax查询。服务器端的查询是否最有效?有没有办法可以分解数据的加载,例如server-side, pipelined datatable这样,您只需要加载用户可以合理看到的信息,然后让他们单独进行ajaxed获取更多信息准备好后的信息,增加感知的响应时间。

另外,虽然我几乎总是按照你的建议使用文档就绪dom加载器,但是不用一次就试试.....运行一些测试用例。当IE 6造成严重破坏时,Dom装载机非常棒。对于大多数较新的浏览器,加载问题已基本克服。

我是SAAS应用程序的UI开发人员,经常处理数百万的记录....所以这对我来说是一个日常难题。我发现以“一次一片”的方式查看数据最有效地创建了最有效的界面。