Usages of jQuery's ajax crossDomain property?
根据jQuery:
crossDomain (default: false for same-domain requests, true for Type: Boolean If you wish to force a
cross-domain requests)
crossDomain request (such as JSONP) on the same domain, set the value
of crossDomain to true. This allows, for example, server-side
redirection to another domain. (version added: 1.5)
我不理解以上内容。
如果代码是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $(document).ready(function () { $.ajax( { url: 'http://es3.com/Handlers/MyHandler.ashx', cache: false, dataType:"jsonp", ... ... }); }); function aaa(json) { alert(json.result); } |
然后指定
当我在同一域中运行此代码时,我看不出为什么它不会那样工作。 (因此-我看不到此属性的用法)。
我做了一个样本
我有2个(已调整主机的)域。
(注意,代码中的url始终是es3.com)。
测试#1:
运行
从
看看差异:(http://i.stack.imgur.com/RKyZp.jpg)
测试2:
运行
从
(http://i.stack.imgur.com/xEcyd.jpg)
我没什么区别。
问题:
为什么/何时需要设置
false for same-domain requests, true for crossDomain requests
根据
"json": Evaluates the response as JSON and returns a JavaScript
object. Cross-domain"json" requests are converted to"jsonp" unless
the request includes jsonp: false in its request options
因为您使用的是
When do I need to set the crossDomain property ?
如果您正在发出相同的域
这为您提供了在发出相同原始请求时检索JSON的优点,以及在进行跨域请求时提供JSONP的功能。如果您重定向到的域上的CORS处于活动状态,则可以在请求选项中设置
例子
从example.com向example.org发出请求。
-
crossdomain 自动设置为true。 -
数据类型设置为
jsonp 。
结果:example.org返回的JSONP。
从example.com向example.com发出请求。
-
crossdomain 自动设置为false。 -
数据类型设置为
jsonp 。
结果:example.com返回的JSONP。
从example.com向example.org发出请求。
-
crossdomain 自动设置为true。 -
数据类型设置为
json 。
结果:example.org返回的JSONP。
从example.com向example.com发出请求。
-
crossdomain 自动设置为false。 -
数据类型设置为
json 。
结果:example.com返回的JSON。
从example.com向example.org发出请求。
-
crossdomain 自动设置为true。 -
数据类型设置为
json 。 -
jsonp 设置为false。 - example.org不支持example.com的CORS
结果:浏览器返回的CORS错误。
从example.com向example.com发出请求,example.com将AJAX重定向到example.edu。
-
crossdomain 手动设置为true。 -
数据类型设置为
json 。
结果:example.edu返回的JSONP。
从example.com向example.org发出请求。
-
crossdomain 自动设置为true。 -
数据类型设置为
json 。 -
jsonp 设置为false。 - example.org确实支持example.com的CORS
结果:example.org返回的JSON。
从example.com向example.com发出请求,example.com将AJAX重定向到example.edu。
-
crossdomain 自动设置为false。 -
数据类型设置为
json 。 - example.edu不支持example.com的CORS
结果:浏览器返回的CORS错误。
让我们假设您有另一个域
您具有以下要求:
在
上有一个网页
在
如果是西班牙语,则需要为同一数据调用
对于西班牙用户,当您使用jQuery从es2.com到es2.com进行ajax请求时,
(a)禁用
(b)启用
重定向脚本标记的src->允许。
希望这很清楚。
据我所知,op是正确的。将dataType设置为jsonp会创建一个JSONP类型请求;将结果写入脚本块并运行。因此,通过将跨域设置为true来强制JSONP似乎是多余的。
但是。该文档说:"如果您想强制执行跨域请求(例如JSONP)",则意味着在其他情况下,您可能希望强制执行跨域行为。我不确定这些情况可能是什么。
缺少时默认不是false。如果缺少域,则默认为true(如上面的第一个示例中所示)。我认为,即使不是在所有情况下,您都可以将其保留为默认值。
此外,在设置跨域参数时,默认情况下,JQuery尝试使用CORS,而不是JSONP。
这是来自JQuery的一些相关片段:https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js
变量" xhrSupported" ...
1 | xhrSupported = jQuery.ajaxSettings.xhr(); |
..用于检查CORS支持。...
1 | support.cors = !!xhrSupported && ("withCredentials" in xhrSupported ); |
..在进行AJAX调用时被检查....
1 2 3 4 5 | jQuery.ajaxTransport(function( options ) { var callback; // Cross domain only allowed if supported through XMLHttpRequest if ( support.cors || xhrSupported && !options.crossDomain ) |
希望这会有所帮助!
您的问题对我了解将jsonp与jQuery结合使用时遇到的问题非常有帮助。
就我而言,我需要对外部域进行JSONP调用。
但是该网址需要从我们的域中构造。
例如,在这里,我假设我的网站在es2.com下
es2.com上的
JSONP调用
es2.com重定向到es3.com?newConstructedUrl=someRandomValue
es3.com?newConstructedUrl=NewCoolValue重定向到es2.com
es2.com响应在响应
中设置新的cookie
该代码在localhost中工作正常,但是在es2环境中我们没有cookie。
看到调试器,该请求是在es2环境中的XHR中完成的
然后,我们需要将crossDomain参数设置为true。然后,即使在es2.com
中也完成了JSONP请求
希望我的用例很清楚!
如果您已经在指定JSONP,则crossDomain参数的作用不大。它只是告诉jQuery要求JSONP,即使它是本地域。
假设您正在使用返回JSON或JSONP的本地服务在计算机上工作。您可以使用普通的
使没有
您还可以通过预先身份识别获得跨域XML,例如通过带有YQL的JSONP加载跨域XML,这实际上只是将其package在JSONP中。