jQuery ajax失败*有时* (ERR_EMPTY_RESPONSE)在Chrome和Safari

jQuery ajax fails *sometimes* (ERR_EMPTY_RESPONSE) in Chrome and Safari

本文关键字:Chrome Safari RESPONSE EMPTY 有时 ajax ERR jQuery 失败      更新时间:2023-09-26

我有一个通过jQuery ajax提交的表单,突然间,开始在一些请求在Chrome 和Safari OS x上失败。我已经测试了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的网络选项卡复制的命令(右键单击请求>复制为cURL)。

如果省略其中一个字段("phone"),错误似乎就会消失。但是,如果我连续点击几次提交按钮,请求最终会成功(在大约2-5次提交之后)——即使填写了"phone",所有请求的表单数据也是相同的。

失败请求和成功请求的响应时间没有区别。(例如,我在失败中得到1.11分,在成功中得到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浏览器有问题。没有对代码做任何修改,它就神奇地开始工作了。

注。我当然知道这是非常不可能的事情发生"随机"和故障排除最有可能没有足够的系统,如果看起来是这样的话,但在这种情况下,错误似乎真的随机出现。

当我们从PHP 5.4升级到5.6时,这个问题已经解决了-似乎PHP中存在某种错误。希望它能帮助到别人!

仅供参考:我最终破解了这个问题,检查响应对象是否匹配此错误,并在发现此错误时触发onSuccess。虽然很丑,但效果不错

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