我需要帮助,因为我遇到了一些我无法找到解决问题的答案。
我在网站A上运行了一个asp.net mvc webapi,在网站B上运行了另一个网站。我认为这符合跨站点的定义。因此我有nuget'Microsoft.AspNet.WebApi.Cors'并添加了“config.EnableCors();”到WebApiConfig.cs的注册metohd。我还添加了Site 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调用的错误处理程序而错误是“no transport”。谁能看到我在这里做错了什么?
答案 0 :(得分:1)
抱歉全部,问题归结为Windows Server 2003没有识别IE 1浏览器并默认为不支持jquery调用的IE模式。
我如何解决这个问题:
注意:Windows Server 2012“ie.browser”文件必须是最新的,并且应用了修补程序。
希望这会对你有所帮助。
答案 1 :(得分:0)
将dataType更改为&#39; jsonp&#39;。
此外,不需要crossDomain属性:
根据jQuery文档:
crossDomain (default: false for same-domain requests, true for cross-domain requests) Type: Boolean If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for
示例,服务器端重定向到另一个域。 (版本添加: 1.5)
此外,作为jQuery文档,始终添加X-Requested-With
标题,因此您也必须接受该标题。
另请参阅jQuery文档:
jsonp类型:String覆盖jsonp中的回调函数名称 请求。将使用此值代替&#39;回调&#39;在里面 &#39;回调=&#39?; url中查询字符串的一部分。所以 {jsonp:&#39; onJSONPLoad&#39;}会导致&#39; onJSONPLoad =?&#39;传递给了 服务器。从jQuery 1.5开始,将jsonp选项设置为false可以防止 jQuery来自添加&#34;?回调&#34;字符串到URL或尝试 使用&#34; =?&#34;转型。在这种情况下,您还应该明确 设置jsonpCallback设置。例如,{jsonp:false, jsonpCallback:&#34; callbackName&#34; }
所以,将jsonp设置为false
更新的代码应该是:
$.ajax({
url: url,
type: 'GET',
data: {},
dataType: 'jsonp',
contentType: "application/json; charset=utf-8",
jsonp: false,
jsonpCallback: "callbackName",
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);
}
});
function callbackName() { console.log('worked');}