jQuery ajax在Chrome和Safari

时间:2015-09-29 09:31:30

标签: javascript jquery ajax wordpress google-chrome

我有一个通过jQuery ajax提交的表单突然,突然之间,开始在OS X上的Chrome 和Safari 一些请求失败。我&# 39;已经测试过Firefox,Opera和iOS Safari,它们似乎都运行得很好(但是我不能说我对此有100%肯定,因为错误似乎随机出现,但我尝试了~10个请求在每个浏览器中没有失败)。

Chrome在控制台中显示POST http://<site url>/wp-admin/admin-ajax.php net::ERR_EMPTY_RESPONSE,并且在请求失败时在控制台中记录响应对象会给我Object {readyState: 0, responseText: "", status: 0, statusText: "error"},而不是非常有帮助。

然而无论响应是否失败或成功,都会执行完整的PHP脚本。我知道这一点,因为从表单发送的电子邮件总是被传递。此外,在PHP中记录所有传入请求标头时,失败请求与成功请求之间没有区别。

我还使用bash $ curl ...检查了回复,并且无法找到回复之间的任何差异,即使我使用可以从Chrome的网络标签中复制的命令(右键单击请求&gt;复制为cURL)。

如果我省略其中一个字段(&#34; phone&#34;),则错误似乎消失了。但如果我一直点击提交按钮几次请求最终成功(大约2-5次提交后) - 即使&#34;电话&#34;填写表格数据在所有请求中都是相同的。

失败请求与后续请求之间的响应时间没有差异。 (即我失败了1.11s,成功了1.16)。

用于提交的代码:( this.onSuccessthis.onError目前只记录请求结果)

$.ajax('<url>', {
    action: '<url>',
    method: 'POST',
    data: data, // Serialized form
    success: $.proxy(this.onSuccess, this), // currently just console_logs the response object
    error: $.proxy(this.onError, this), // currently just console_logs the response object
    always: $.proxy(this.always, this)
});

此外,我发现了一些关于在Chrome中缓存的超时和问题,因此我尝试将其更改为无变化:

$.ajax('<url>', {
    action: '<url>',
    timeout:9999,
    async:true,
    cache:false,
    method: 'POST',
    data: data, // Serialized form
    success: $.proxy(this.onSuccess, this), // currently just console_logs the response object
    error: $.proxy(this.onError, this), // currently just console_logs the response object
    always: $.proxy(this.always, this)
});

表单看起来像这样(但有很多造型模糊):

<form action="#ww_main" class="ajax-form">
    <input type="text" data-min-length="3" name="main[name]" id="name" required="">
    <input type="email" name="main[email]" id="email" required="">
    <input type="tel" name="main[phone]" id="phone">
    <textarea name="main[message]" data-min-length="5" id="message" required=""></textarea>
    <button type="submit">Skicka</button>
</form>

有谁知道可能导致这种情况的原因是什么?或者至少可以给我一个如何继续的暗示?我现在已经没想完了......

提前致谢!

更新

Safari突然正常工作......只是Chrome有问题。 Haven没有对代码进行任何更改,只是神奇地开始工作。

P.S。我当然知道它发生了非常不可能的事情&#34;随机&#34;如果看起来如此,故障排除很可能没有系统化,但在这种情况下,错误似乎真的是随机出现的。

3 个答案:

答案 0 :(得分:1)

当我们从PHP 5.4更新到5.6时解决了这个问题 - 某些地方似乎存在PHP中的某种错误。希望它可以帮助别人!

答案 1 :(得分:0)

供参考: 我最终破解了这个问题,检查响应对象是否与此错误匹配,并在发现此错误时触发onSuccess。 Uuuuugly,但它做了伎俩。

答案 2 :(得分:0)

你应该尝试在服务器的php.ini文件中增加memory_limit,甚至至少禁用它来进行测试。