Ajax 帖子被 Firefox 中止(在 Chrome 或 IE 中看不到)

问题描述 投票:0回答:9

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

$.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请求是通过多种方法调用的,只有当发送最大的数据集时才会失败。

ajax firefox post fiddler
9个回答
14
投票

只尝试

async: false

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


5
投票

我首先会明确设置(和更改)一些基本的 ajax 选项:

 cache: false,
 timeout: 60000,
 async: false

4
投票

您的服务器返回什么类型的内容。 JSON 或 HTML 内容。您是否在服务器内容中使用 charset=utf-8 ?确保您的服务器响应必须采用 JSON contentType 格式。另一种猜测是从代码中删除 datatype: "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");
            }
        });

数据类型:“json”,内容类型:“application/json”有道理


2
投票

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

您可以使用

e.preventDefault()
来实现此目的。

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


1
投票

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


1
投票

我也遇到了类似的问题,并尝试了上面描述的一些想法。 我终于修复了“中止”状态:

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

感谢大家提供线索。


0
投票

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

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


0
投票

如果您在 CORS 请求上使用 2 路 SSL 身份验证,Firefox 将默认中止您的 jQuery ajax 请求。 这是由于 Firefox 和 Chrome 中 CORS 的实现不同所致。 您可以通过将

withCredentials: true
添加到 XHR 实例来解决客户端代码中的此问题。 在 jQuery 中,您可以将其添加到
ajax
调用中:

xhrFields: {
  withCredentials: true
}

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

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


0
投票

ns_binding_中止发布请求

在表单提交过程中,如果您遇到“ns_binding_aborted”的问题,那么

您可以使用 e.preventDefault() 来解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.