19

使用 firefox 时,我的 ajax 发布请求在 firebug 中被报告为中止。ajax 帖子在 IE 和 Chrome 中运行良好。这不是跨域请求。我尝试使用 fiddler 查看问题,并且当 fiddler 捕获网络流量(设置为解密 https 的选项)时,该帖子有效。无法在我的本地开发环境中创建发布问题,因为所有 Firefox 尝试成功发布我通过 ajax 发送的数据。知道为什么在提琴手运行时帖子有效吗?它可能会让我知道如何让它工作。

$.ajax({
            type: 'POST',
            url: '/Save',
            data: JSON.stringify(dataset),
            datatype: "html",
            contentType: "application/json",
            success: function (data, textStatus, jqXHR) {
                //alert("success");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                //alert("error");
            }
        });

此外,这个 ajax 请求由许多方法调用,并且只有在发送最大的数据集时才会失败。

4

8 回答 8

12

只试

async: false

在 ajax 选项中,我遇到了同样的问题。

于 2012-11-09T12:47:28.983 回答
5

我将从显式设置(和更改)一些基本的 ajax 选项开始:

 cache: false,
 timeout: 60000,
 async: false
于 2012-11-02T14:03:17.423 回答
3

您的服务器返回什么类型的内容。JSON 或 HTML 内容。您是否在服务器内容中使用charset=utf-8 。确保您的服务器响应必须是 JSON contentType。另一个猜测从您的代码中删除数据类型:“html” 。试试你的运气。

如果您的服务器返回 json 表示,请在下面尝试

$.ajax({
            type: 'POST',
            url: '/Save',
            data: JSON.stringify(dataset),
            datatype: "json",
            contentType: "application/json",
            success: function (data, textStatus, jqXHR) {
                //alert("success");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                //alert("error");
            }
        });

datatype: "json", contentType: "application/json"有意义

于 2012-11-08T19:27:35.850 回答
2

如果您从事件处理程序发送此 AJAX 请求(例如:单击提交按钮),请确保阻止浏览器的默认行为(提交表单),直到您将触发 2 个 HTTP 请求,第一个被中止。

您可以使用e.preventDefault()来实现这一点。

我刚刚在 IE8 上遇到了这个问题。

于 2012-11-13T14:17:35.537 回答
1

我也有类似的问题,并尝试了上面描述的一些想法。我终于通过以下方式修复了“中止”状态:

  1. 添加e.preventDefault();return false;按钮事件处理程序
  2. 添加datatype: "json", contentType: "application/json",jQuery.ajax方法参数。

感谢大家提供线索。

于 2015-02-09T13:56:28.227 回答
1

检查服务器上的最大帖子大小设置。

于 2012-11-08T14:54:28.797 回答
0

这要么是跨域问题,要么是 Firefox 中止您的请求的问题,因为请求是异步的。对于跨域,您可以检查请求的来源以及网络服务允许的内容。您可能需要阅读 CORS。

如果它不是跨域的,那么肯定是请求异步的问题。只需将其更改为同步即可。

于 2015-01-28T17:48:26.877 回答
0

如果您在 CORS 请求上使用 2-way SSL 身份验证,Firefox 将默认中止您的 jQuery ajax 请求。这是由于 Firefox 和 Chrome 中 CORS 的不同实现。withCredentials: true您可以通过添加到您的 XHR 实例在您的客户端代码中解决此问题。在 jQuery 中,您可以将其添加到ajax调用中:

xhrFields: {
  withCredentials: true
}

查看这些错误报告以获取更多详细信息:

我还注意到 Firefox 仍然绝对拒绝在 OPTIONS 预检请求上发送凭据,因此您需要将服务器配置为不需要它们(这在 2 路 SSL 场景中对我来说似乎很疯狂)。

于 2018-03-13T21:13:09.390 回答