我有一个通过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.onSuccess
和this.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;如果看起来如此,故障排除很可能没有系统化,但在这种情况下,错误似乎真的是随机出现的。
答案 0 :(得分:1)
当我们从PHP 5.4更新到5.6时解决了这个问题 - 某些地方似乎存在PHP中的某种错误。希望它可以帮助别人!
答案 1 :(得分:0)
供参考:
我最终破解了这个问题,检查响应对象是否与此错误匹配,并在发现此错误时触发onSuccess
。 Uuuuugly,但它做了伎俩。
答案 2 :(得分:0)
你应该尝试在服务器的php.ini文件中增加memory_limit,甚至至少禁用它来进行测试。