gpt4 book ai didi

javascript - jQuery 的 ajax crossDomain 属性的用法?

转载 作者:行者123 更新时间:2023-12-03 21:37:53 25 4
gpt4 key购买 nike

根据 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 example, server-side redirection to another domain. (version added: 1.5)

我不明白上面的内容。

如果代码是

$(document).ready(function ()
{
$.ajax(
{
url: 'http://es3.com/Handlers/MyHandler.ashx',
cache: false,
dataType: "jsonp",
...
...
});
});

function aaa(json)
{
alert(json.result);
}

并且我指定datatype:jsonp,那么响应将是 application/javascript mime 类型,因为它是一个将在我的浏览器中运行的脚本。

当我在相同域下运行此代码时,我看不出有任何理由为什么它不会那样工作。 (因此 - 我没有看到此属性的用法)。

我已经制作了一个示例

我有 2 个(主机调整过的)域。 es2.comes3.com

(注意,代码中的 url 始终为 es3.com)

测试 #1:

es3.com 运行代码:(左 Pane )
es2.com 运行代码:(右 Pane )
crossDomain:false(缺失时默认)。

看看差异:( /image/RKyZp.jpg )

enter image description here

测试#2:

es3.com 运行代码:(左 Pane )
es2.com 运行代码:(右 Pane )
crossDomain:true <--- 通知

( /image/xEcyd.jpg ) enter image description here

我没有看到任何区别。

问题:

为什么/何时我需要设置crossDomain属性?

最佳答案

default for crossDomain如下:

false for same-domain requests, true for crossDomain requests

根据 crossDomain 设置的值,data-type 的解释方式有所不同:

"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

因为您使用的是 jsonp 而不是 json,所以您在测试中不会看到任何差异。

When do I need to set the crossDomain property ?

如果您发出相同域 json 请求,并且您的网站可能会将请求重定向到另一个域以提供响应(通过 HTTP 3XX),那么您应该将 crossDomain 属性设置为 true,以便您的调用脚本可以读取响应。

这为您提供了在发出同源请求时检索 JSON 的优势,以及在发出跨源请求时提供 JSONP 功能的优势。如果 CORS 在您重定向到的域上处于事件状态,则您可以在请求选项中设置 jsonp: false

示例

从 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 错误。

关于javascript - jQuery 的 ajax crossDomain 属性的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com