JSONP和XMLHttpRequest问题

use*_*201 3 javascript jsonp xmlhttprequest

我试图在浏览器(以及Javascript新手)中理解相同的原始策略,并在维基百科上遇到了JSONP页面.该如何使用一节说-

现在,考虑可以指定任何URL,包括返回JSON的URL,作为元素的src>属性.这意味着可以通过> HTML页面中的脚本元素检索JSON.

但是,JSON文档不是JavaScript程序.如果要由浏览器在元素中进行评估,则src URL的返回值必须是可执行的JavaScript.在JSONP使用模式中,URL返回动态生成的JSON,其中包含一个函数调用.这是JSONP的"填充"(或有时候,"前缀").

我的问题是 -

  • 那么XMLHTTPRequest()应该只返回javascript或html吗?它不能返回纯粹的json文档吗?
  • 我认为相同的源策略不适用于XMLHttpRequest()调用.为什么需要在DOM中注入一个标签来调用第三方服务器?这是所有网站的广告附加组件如何回家收集数据?
  • 最后,我根本不理解JSONP.有人可以向我解释或推荐一个更好的解释吗?

谢谢,

- P.

Que*_*tin 8

那么XMLHTTPRequest()应该只返回javascript或html吗?

它可以返回你喜欢的任何文本(也许是二进制数据,但我从来没有看到过这样,所以我不会发誓)

它不能返回纯粹的json文档吗?

它可以.

我认为相同的源策略不适用于XMLHttpRequest()调用.

同源策略最肯定不会适用于XHR

为什么需要在DOM中注入一个标签来调用第三方服务器?

通过从另一个来源加载脚本(带有嵌入数据)来绕过相同的原始策略.

这是因为您没有使用JavaScript读取远程资源.您正在执行一些带有嵌入数据的远程JavaScript.

最后,我根本不理解JSONP.有人可以向我解释或推荐一个更好的解释吗?

JSON-P只是从另一个来源加载一些JavaScript.JavaScript包含单个函数调用(在添加<script>元素之前定义的函数)和单个参数(JS对象或数组文字).