0

我在客户的服务器上遇到了一个非常奇怪的问题。
我在几个脚本中使用了下面发布的代码。$.ajax 配置几乎相同(即只有文件、数据和成功函数更改)并且始终使用 type:POST。
这在大多数情况下都有效,但对于 POST 以下的情​​况总是失败。将类型更改为 GET 没有问题。

我有点不知道这里发生了什么。

var parameter = {
    password : $("#password").val()
};

$.ajax({
    type     : "POST",
    url      : "query/submit_password.php",
    dataType : "xml",
    async    : true,
    data     : parameter,
    success  : function(aXHR) { /* ... */ },
    error    : function(aXHR, aStatus, aError) { alert("Error:\n" + aStatus + "\n"+ aError); }
});

此代码始终会导致警报“NetworkError:发生网络错误。”。
再次 - 具有几乎相同代码的其他情况可以正常工作。
Chrome 和 Firefox 开发工具报告一个 POST 错误,没有任何进一步的解释。

知道这里会发生什么吗?


还有一些细节。

  • 客户的网站托管在 GoDaddy 上
  • 相同的代码在其他服务器上运行良好
  • 是的,该文件确实存在,因为 GET 请求有效
  • 我尝试过的所有浏览器都没有安装拦截器插件(如 adblock)

HTTPScoop 显示以下结果
(3 次尝试,红色状态显示“连接已被通信伙伴关闭”):

HTTPScoop 结果

Chrome 显示以下内容:

铬错误


几乎解决了。
apache 日志显示请求的状态为 403。
它还显示返回的大小为 0,这可能是 chrome 等显示请求失败的原因。
为什么会发生这种情况仍不清楚,但它绝对是服务器端配置问题(很可能是 mod_rewrite 问题或类似的问题)。

4

1 回答 1

1

尝试将 contentType: "application/json; charset=utf-8" 添加到您的 ajax 调用中

$.ajax({
    type     : "POST",
    url      : "query/submit_password.php",
    contentType: "application/json; charset=utf-8",
    dataType : "xml",
    async    : true,
    data     : parameter,
    success  : function(aXHR) { /* ... */ },
    error    : function(aXHR, aStatus, aError) { alert("Error:\n" + aStatus + "\n"+ aError); }
});

如果它没有帮助尝试 benhowdle89 所说的,stringify(parameter)。

于 2013-10-27T07:36:04.780 回答