【发布时间】:2014-03-14 00:48:31
【问题描述】:
我正在开发一个内部网络应用程序。在 IE10 中,请求工作正常,但在 Chrome 中,所有 AJAX 请求(有很多)都是使用 OPTIONS 发送的,而不是我给它的任何定义的方法。从技术上讲,我的请求是“跨域”。该站点在 localhost:6120 上提供服务,我向其发出 AJAX 请求的服务在 57124 上。This closed jquery bug 定义了问题,但不是真正的修复。
如何在 ajax 请求中使用正确的 http 方法?
编辑:
这是在每个页面的文档加载中:
jQuery.support.cors = true;
每个 AJAX 的构建方式都类似:
var url = 'http://localhost:57124/My/Rest/Call';
$.ajax({
url: url,
dataType: "json",
data: json,
async: true,
cache: false,
timeout: 30000,
headers: { "x-li-format": "json", "X-UserName": userName },
success: function (data) {
// my success stuff
},
error: function (request, status, error) {
// my error stuff
},
type: "POST"
});
【问题讨论】:
-
该错误报告中的最后一条评论很好地解释了它......
-
这让我大吃一惊,因为我所做的一切都非常普通(而且我的代码类似于 jquery 错误中的代码)。除此之外,这不是不包括它的借口。 BRB,获取一些示例代码。
-
请注意,IE 在确定请求是否跨域时不会考虑端口号。
-
@KevinB:我们的 REST 服务利用不同的请求,根据 http 方法做不同的事情。将所有内容切换为 GET 不是有效的修复方法。另外,根据 Dark Falcon 的回答,无论如何它都无济于事,因为我在请求中有 X-UserName 和其他自定义标头。
-
这并没有改变这样一个事实,即如果您要发出跨域请求,则必须遵循适用于跨域请求的所有规则才能使其正常工作。跨域请求通常涉及一个 OPTIONS 请求。处理得当,问题就会消失。解决此问题的唯一其他方法(不更改 api)是在与使用服务器端代码与 api 交互的主页面相同的服务器上拥有一个脚本。
标签: jquery ajax cross-domain