小编Bod*_*bag的帖子

如何打破悬挂的ajax调用并加载另一个页面

我正在开发发票应用程序.目前我正在使用OO php来构建发票对象.对象本身包含客户,产品,发票详细信息,公司的对象.

现在我正在编写一个页面来进行概述.发生的问题是,当我有太多的发票(仅用1500个虚拟发票进行测试,其中的时间可能会更多)时,php对象的构建大约需要7秒钟.我觉得这太长了,因为这只是一个请求.此外,由于php运行服务器端,因此页面在对象全部构建之前没有加载任何内容.我盯着一个空屏幕7秒,然后瞬间得到了所有东西(所有在本地主机上,所以在线它应该更糟).

由于需要为页面提供更多功能,然后只是作为概述(即:创建新发票,使用过滤器来缩小显示的发票),我不希望用户需要等待发票才能构建使用其他功能,我改变了页面的工作方式.

现在我首先加载我的基本html结构,然后使用$ .ajax()调用开始获取我的发票数据.我构建了一个ajax_loader来通知用户发生了什么.呼叫完成后,会显示数据,但我仍然遇到用户无法执行任何操作的问题.他可以点击一个链接/按钮,但是在我的ajax调用完成之前它不会"动作".一旦通话完成,一切正常.在有活动呼叫时单击链接确实会注册"click"事件,但触发器仅在ajax完成时发生.

这个问题与我同步或未同步的ajax调用无关.如果有人对如何克服这个问题有任何建议,我将非常感谢他们.我的第一个想法是取消ajaxcalls但是从我读到的东西到现在为止我怀疑abort()函数不会完成工作.

编辑: 做一些更多的试用,我注意到ajaxcalls仍在运行时一切正常,除了从我自己的网站(域,服务器或我应该调用它)加载页面或做任何其他涉及相同的ajaxcall服务器即:

$("#dummyButton").click(function(){  
window.location='http://www.google.com' //works  
window.location='index.php'  //doesn't work  
alert("test"); //works  
console.log("test"); //works    
})

a href='http://www.google.com'  //works  
a href='index.php' //doesnt work 
Run Code Online (Sandbox Code Playgroud)

所以我的猜测是服务器正在忙于构建我的发票对象,因此它不会接受新的请求.以下是对此结论的补充:

   console.log("start slow call");  
    slow = $.ajax({  
        a very slow/heavy call  
        success:function(){  
            console.log('end slow call');  
        }  
    });  
    console.log('start fast call');  
    quick = $.ajax({  
        a very quick/lightweight call  
        success: function(){  
            console.log('end fast call');  
        }  
    });  
Run Code Online (Sandbox Code Playgroud)

当我同时执行这两个呼叫时,快速呼叫将无法完成,直到慢速呼叫完成:

控制台打印:

start slow call  
start fast call  
end slow call  
end fast call
Run Code Online (Sandbox Code Playgroud)

同时做两个使得快速通话需要5秒钟(根据firebug),当只做快速通话时它在150ms内完成

在所有这些之前,我已经猜到,多个ajaxcalls将以并行方式而不是串行方式完成.

abort() function: (having …
Run Code Online (Sandbox Code Playgroud)

php ajax session jquery

4
推荐指数
1
解决办法
1871
查看次数

标签 统计

ajax ×1

jquery ×1

php ×1

session ×1