jQuery.Ajax“;拒绝访问受限制的URI“;解释?
我正在调查本地(file://access)html应用程序中.NET WCF域服务的跨域使用情况。应用程序正在使用jQuery进行AJAX调用 在服务器上没有身份验证(即匿名身份验证)的情况下,我已成功检索到JSON格式的数据,其中CORS“Access Control Allow Origin:*”标头已就位,JSONP格式的数据没有标头 现在,我试图了解身份验证和CORS头与JSON(而不是JSONP)格式数据一起使用时的行为 下面的jQuery代码将向服务器发送一个请求,服务器反过来以“HTTP/1.1 401 Unauthorized”响应 以下jQuery代码不会向服务器发出请求,并立即抛出异常“拒绝访问受限URI”,代码1012jQuery.Ajax“;拒绝访问受限制的URI“;解释?,ajax,json,jquery,cors,Ajax,Json,Jquery,Cors,我正在调查本地(file://access)html应用程序中.NET WCF域服务的跨域使用情况。应用程序正在使用jQuery进行AJAX调用 在服务器上没有身份验证(即匿名身份验证)的情况下,我已成功检索到JSON格式的数据,其中CORS“Access Control Allow Origin:*”标头已就位,JSONP格式的数据没有标头 现在,我试图了解身份验证和CORS头与JSON(而不是JSONP)格式数据一起使用时的行为 下面的jQuery代码将向服务器发送一个请求,服务器反过来以“
$.ajax({
url: myUrl,
dataType: 'json',
cache: false,
complete: function () { /* do stuff */ },
timeout: 5000,
username: "chris",
password: "password",
data: myData
});
我理解并期待第一个案例。有人能给我解释一下第二种情况的例外情况吗?我本来希望至少能提出这个请求
编辑:Grrr,这在FF 10.0.2中。Chrome似乎和我预期的一样,这是FF问题吗?您可以使用回调函数来克服这一问题:
如果在跨源请求中使用cookie或HTTP basic auth用户名/密码字段等凭据,还需要将XHR上的“withCredentials”标志设置为true。在jQuery中,这是通过$.ajax调用上的xhrFields属性完成的。将代码更改为
$.ajax({
url: myUrl,
dataType: 'json',
cache: false,
complete: function () { /* do stuff */ },
timeout: 5000,
username: "chris",
password: "password",
data: myData,
xhrFields: { withCredentials: true }
});
另外,另一端的服务器不能使用“*”作为带有凭据的访问控制允许源站标头。相反,它必须为发送给它的源标题提供精确匹配。我意识到我可以通过jQuery.ajax回调函数之一捕获错误,或者使用JSONP回调函数-这就是你的意思吗?我的问题是,为什么(可能只是Firefox)没有发出请求,而是在这种情况下引发了一个错误。
$.ajax({
url: myUrl,
dataType: 'json',
cache: false,
complete: function () { /* do stuff */ },
timeout: 5000,
username: "chris",
password: "password",
data: myData,
xhrFields: { withCredentials: true }
});