jQuery Ajax快速连接中止和新请求
我有一个移动应用程序,这使得一个
JqXHR = $.ajax({
url: 'url',
data: null,
async: true,
cache: false,
dataType: 'json',
type: 'GET',
crossDomain: true,
timeout: 63000,
success: function(data, textStatus, jqXHR) {},
error: function(jqXHR, textStatus, errorThrown) {}
});
请求。 它等待63秒(PHP后端CAN运行约62秒),以便在另一端进行用户交互。 现在,如果在此期间我决定中止这个请求,那么我打电话给JqXHR.abort()
。 在错误处理程序中,我已经处理/区分真正的错误和异常,这是有效的。 在中止后,我想发送一个其他的API调用到服务器来捆绑松散的一端,并确保我的取消请求被记录下来。
这就是问题所在。 即使我abort()
第一个请求,PHP脚本仍然在服务器上运行,如果它也执行了第二个请求,这将会使其停止并死亡(),这不会成为问题。 但它没有发生。 第二个请求直到第一个完成才会发生。
有任何想法吗?
jQuery 1.8.2,jQuery Mobile 1.2.0,PhoneGap 2.0.0和2.1.0,Apache 2,Linux,PHP 5.3
一些信息:并行Ajax与Apache会话锁定
会话数据通常在 脚本终止 后存储 ,但由于会话数据被锁定以防止并发写入,所以任何时候只有一个脚本可以在会话上运行 。
例如,将帧集与会话一起使用时,由于此锁定,您将体验逐帧加载的帧。 您可以 通过尽快结束会话 来缩短加载所有帧所需的时间 。
因此,您可以在session_start();
使用ajax脚本中的会话session_start();
(可能自动处理),然后立即(尽快)by session_write_close();
session_write_close();
将“结束”当前会话并存储会话数据。
但是: session_id()
仍然会传递正确的(当前)PHPSESSID,因此只要在需要的时候再次执行session_start()
,就可以获得对当前会话的写入权限。
我在所有的ajax脚本中都以这种方式使用它来实现会话处理并允许并行请求
看来我遇到了很好的旧PHP会议与AJAX请求问题。 事实上,我的老板用google搜索了一些我从未想到的表达方式,发现了这个问题。 我在后端使用Zend框架,它会自动启动一个会话名称空间,所以在我的API控制器的preDispatch()方法中,我必须放入一个@session_write_close(); 线条,就好像通过魔术一样,它就像魅力一样。
感谢Arun的快速回复,这是最令人满意的。
因此,简而言之:如果您使用Zend Framework或session_autostart或其他启动会话的方式,那么它们将不会与平行的AJAX请求一起飞行。
abort
方法不会终止服务器进程,它只会终止客户端等待服务器响应。
就第二次请求而言,你能分享第二次请求的发送方式吗?
链接地址: http://www.djcxy.com/p/64711.html上一篇: jQuery Ajax abort and new request in quick succession
下一篇: Is a conversion from a pointer to type to a pointer to array of type safe?