Roy*_*mir 25 javascript ajax jquery
根据jQuery:
crossDomain (default: false for same-domain requests, true for cross-domain requests)类型:Boolean如果要在同一域上强制执行crossDomain请求(例如JSONP),请将crossDomain的值设置为true.例如,这允许服务器端重定向到另一个域.(版本增加:1.5)
我不明白以上.
如果代码是
$(document).ready(function ()
{
$.ajax(
{
url: 'http://es3.com/Handlers/MyHandler.ashx',
cache: false,
dataType: "jsonp",
...
...
});
});
function aaa(json)
{
alert(json.result);
}
Run Code Online (Sandbox Code Playgroud)
并且即时通讯指定datatype:jsonp,然后响应将是application/javascript mime typed,因为它是一个将在我的浏览器中运行的脚本.
当我在同一个域下运行此代码时,我没有看到为什么它不会像那样行为的任何原因.(因此 - 我没有看到这个属性的用法).
我做了一个样本
我有2个(主机调整)域名.es2.com和es3.com.
(注意,代码中的url始终是es3.com)
测试#1:
从es3.com以下位置运行代码:(左窗格)从以下位置
运行代码es2.com:(右窗格)
crossDomain:false(缺少时默认).
看看差异:(http://i.stack.imgur.com/RKyZp.jpg)
测试#2:
运行以下代码es3.com:(左窗格)
运行以下代码es2.com:(右窗格)
crossDomain:true <---通知
(http://i.stack.imgur.com/xEcyd.jpg)

我没有看到任何区别.
题 :
为什么/何时需要设置crossDomain属性?
Sil*_*Fox 16
在默认crossDomain情况如下:
对于同域请求为false,对于跨域请求为true
该data-type解释不同,具体取决于该值crossDomain设置:
"json":将响应计算为JSON并返回JavaScript对象.跨域"json"请求将转换为"jsonp",除非请求选项中包含jsonp:false
因为您使用jsonp而不是json您将不会在您的测试中看到任何差异.
我什么时候需要设置crossDomain属性?
如果您要发出相同的域json请求,并且您的站点可能会将请求重定向到另一个域以提供响应(通过HTTP 3XX),那么您应该将该crossDomain属性设置为true,以便您的调用脚本可以读取响应.
这使您可以在进行相同的原始请求时检索JSON,并在进行跨源请求时检索JSONP的功能.如果CORS在您重定向到的域上处于活动状态,则可以jsonp: false在请求选项中进行设置.
crossDomain 自动设置为true.jsonp.结果: example.org返回JSONP.
crossDomain 自动设置为false.jsonp.结果: example.com返回JSONP.
crossDomain 自动设置为true.json.结果: example.org返回JSONP.
crossDomain 自动设置为false.json.结果: example.com返回JSON.
crossDomain 自动设置为true.json.jsonp 设置为false.结果:浏览器返回CORS错误.
crossDomain 手动设置为true.json.结果: example.edu返回JSONP.
crossDomain 自动设置为true.json.jsonp 设置为false.结果: example.org返回JSON.
crossDomain 自动设置为false.json.结果:浏览器返回CORS错误.
假设您有另一个域spanish.es2.com为您网站的西班牙用户提供服务。
您有以下要求:
拥有一个网页es2.com
调用 api 并向es2.com其传递一些用户信息(或 cookie ),并获取一些用户数据。但如果用户是西班牙人,则spanish.es2.com需要调用 api 来获取相同的数据。
当您使用 jQuery 从 es2.com 到 es2.com 执行 ajax 请求时,对于西班牙用户:
(a)crossdomain禁用:您的es2.comapi 会发现用户是西班牙人,因此会执行 http 重定向到spanish.es2.com,由于 ajax 相同域策略,这将不起作用,并且 ajax 会失败。ajax url 中的重定向 -> 不允许。
(b)crossdomain启用后:您的 es2.com api 的 jsonp 响应实际上作为包装在函数中的脚本标记加载,因此 http 重定向到其他域并不重要,并且内容仍然加载,因此 ajax 可以工作。在脚本标记的 src 中重定向 -> 允许。
希望这能够清楚地说明这一点。
| 归档时间: |
|
| 查看次数: |
24499 次 |
| 最近记录: |