2013-03-27 58 views
1

我们正在开发一个跟踪系统,它使用WordPress AJAX API在WordPress环境中进行3次ajax调用,并在第3次调用它刷新页面。AJAX和200 OK消息:他们是否需要完成服务器端呼叫?

我注意到,有时我的数据录入尝试在后端失败,我假设(这可能是错误的),这是因为我们的最终Ajax调用在前一个获得200 OK清除之前完成,并断开连接,这意味着数据永远不会被存储。

现在我的印象是,只要一个jQuery.ajax({type:'POST')调用被发布,我可以立即关闭页面,并且我发布的服务器端仍然会收到并处理数据,无论发生了什么变化,我的数据测试显示一些数据没有得到一致的输入,我是否认为这不应该与我最终的AJAX调用完成(并重新加载页面)有关,先前AJAX调用前用200 OK清除?

感谢您的帮助!

+0

是第一'GET'的'success'回调里面的第2'GET'等。另外,请不要来代码或更好的,一个[Fiddle](http://jsfiddle.net)或[Plunk](http://plnkr.co)的上下文。 – couzzi 2013-03-27 02:50:27

+0

如果您在不等待第一个响应的情况下连续进行3次呼叫,则不会保证该请求将按其发送顺序进行处理。 – 2013-03-27 03:28:50

+0

对此的解决方案是链接请求,以便第一个请求的成功回调发送第二个请求 – 2013-03-27 03:29:28

回答

1

是,如果您发送ajax请求到服务器,您可以关闭该页面,服务器将完成请求(执行代码)。

但有一点你必须知道,你不知道你的请求是否到达服务器。

jQuery.ajax("htpp://",{type: 'POST'}); 

这是一个异步请求,所以它会在后台执行的代码。执行这行代码并不意味着你已经发送了请求。它有一些阶段在后台工作。

  1. jQuery将分析你的代码,看你想要什么,
  2. 这将创建一个XMLHttpRequest对象,高于设定选项。
  3. 最后它会发送请求的服务器。

因此,如果您在第三阶段之前立即关闭该页面,则不会发送请求。

我建议您发送一个同步ajax请求并等待刷新/关闭页面的任何响应。由于同步Ajax请求可能会暂时锁定浏览器,请求处于活动状态时禁用任何操作。

jQuery.ajax()必须设置异步假,使其同步,这样,

jQuery.ajax({ 
    url: Url, 
    success: function(r) {}, 
    async:false 
    }); 
+0

谢谢ocanal,这有助于很多。 – atwellpub 2013-03-28 16:14:03