我正在尝试执行以下jQuery.ajax请求,我面临一个奇怪的问题。
当我使用IE9发送此请求时,虽然我发送了chromeType请求,但是我仍然缺少contentType参数。
$.ajax({
type: "POST",
contentType: "application/x-www-form-urlencoded",
url: this.AgentServiceUrl + "/" + methodName,
data: data,
async: true,
success: function (xml, textStatus) { if (successHandler != null) successHandler(xml, textStatus); },
error: function (xmlHttpRequest, textStatus, errorThrown) { if (errorHandler != null) errorHandler(state, xmlHttpRequest, textStatus, errorThrown); }
});
我正在使用jQuery 2.0.2和jQuery.XDomainRequest.js来处理跨域请求。
我该怎么办?
答案 0 :(得分:3)
$ .ajax使用XDomainRequest以允许AJAX应用程序进行安全的跨源请求
在Internet Explorer 8中,引入了XDomainRequest对象。这个 object允许AJAX应用程序发出安全的跨源请求 直接确保HTTP响应只能被读取 当前页面,如果数据源指示响应是公开的
但遗憾的是,请求的Content-Type标头仅支持text / plain
在XDomainRequest对象的原始版本中,我们允许 POST请求的Content-Type规范。有人指出 这违反了我们只发出HTML请求的目标 表单可以发布,因为HTML表单仅限于发送数据 三种不同的内容类型:text / plain, application / x-www-urlencoded和multipart / form-data。特别是, 有人指出,一些AJAX服务器库会盲目地 假设他们收到带有SOAP或JSON的请求 Content-Type,然后客户端必须是可信任的或Same Origin (因为HTML本身以前没有提供交叉来源的方法 具有该Content-Type的请求。)
不幸的是,当我们在以后的IE8测试版中修复此问题时,我们就去了 有点太远;我们将内容类型限制为text / plain,但没有 允许调用者指定数据所在的位置 application / x-www-urlencoded表单。这是有问题的,因为 服务器端框架(例如ASP,ASPNET等)只会自动生成 如果x-www-urlencoded,则将请求的字段解析为名称 - 值对 指定了内容类型。
要解决此问题,请使用当前处理HTML的服务器代码 必须重写表单以手动解析请求主体 从XDomainRequest对象接收请求时的名称 - 值对。 这使得添加对XDomainRequest对象的支持更加困难 比起其他情况。