我需要帮助,因为我遇到了一些我无法找到解决问题的答案 .
我有一个在网站A上运行的asp.net mvc webapi和在站点B上运行的另一个站点 . 我认为这符合跨站点的定义 . 因此我有nuget'Microsoft.AspNet.WebApi.Cors'并添加了“config.EnableCors();”到WebApiConfig.cs的注册metohd . 我还添加了网站A的web.config
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
<!-- Latest Browser Mode-->
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
除此之外,我已将[EnableCors(“_ ", " ", " *”)]添加到我正在使用的控制器基类中 .
我认为这是我为webapi网站启用cors所需的一切 .
在网站B上我有一个使用以下内容的javascript函数:
$.ajax({
url: url,
type: 'GET',
data: {},
dataType: 'json',
contentType: "application/json; charset=utf-8",
crossDomain: true,
success: function (data, textStatus, jqXHR) {
alert('success');
},
error: function (jqXHR, textStatus, err) {
if (window.console) console.log("Error with ajax call: " + err);
$('#findCustomer').text('Error: ' + err);
},
beforeSend: function (xhr) {
var headerValue = "Basic <somecode>";
xhr.setRequestHeader('Authorization', headerValue);
}
});
问题是我一直打到ajax调用的错误处理程序,错误是“没有传输” . 谁能看到我在这里做错了什么?
2 回答
抱歉全部,问题归结为Windows Server 2003无法识别IE 1浏览器并默认为不支持jquery调用的IE模式 .
我是如何解决这个问题的:
Web Developer工具并查看了"Emulation"选项卡 .
注意"Document mode"是8(默认值) .
将此更改为"Edge"或"10",一切正常 .
在解决方案中创建了一个"app_browser"文件夹 .
创建了"ie.browser"文件 .
将最新的Windows Server 2012 "ie.broswer"文件内容复制到此创建的文件中 .
发布了该网站 .
一切都好:)
注意:Windows Server 2012“ie.browser”文件必须是最新版本,并且应用了修补程序 .
希望这对你有所帮助 .
将dataType更改为'jsonp' .
此外,不需要crossDomain属性:
根据jQuery文档:
此外,作为jQuery文档,始终添加
X-Requested-With
标头,因此您也必须接受该标头 .还有关于jQuery文档:
所以,将jsonp设置为false
更新的代码应该是: