Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问纽约时报API和维基媒体API的区别是什么?_Javascript_Ajax_Xss - Fatal编程技术网

Javascript 访问纽约时报API和维基媒体API的区别是什么?

Javascript 访问纽约时报API和维基媒体API的区别是什么?,javascript,ajax,xss,Javascript,Ajax,Xss,我目前正在学习这门课程,我正在学习AJAX课程 我的项目是参加一个addrress和: 载入《纽约时报》文章 从Google Streetview加载背景图像 从维基百科加载相关文章 前两个我都做完了。第三个需要jsonp或CORS,我的问题是:为什么? 前两个工作正常的调用之间有什么区别: http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity&api-key=... http://maps.google

我目前正在学习这门课程,我正在学习AJAX课程

我的项目是参加一个addrress和:

  • 载入《纽约时报》文章
  • 从Google Streetview加载背景图像
  • 从维基百科加载相关文章
前两个我都做完了。第三个需要
jsonp
CORS
,我的问题是:为什么?

前两个工作正常的调用之间有什么区别:

http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity&api-key=...
http://maps.googleapis.com/maps/api/streetview?size=600x400&location=...
这个失败了吗

https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=...
注:以上URL为:

  • 使用
    jQuery.getJSON()
    (纽约时报)搜索文章
  • 用作背景图像的
    src
    (谷歌街景)
  • 使用
    jQuery.ajax()
    (维基百科)搜索相关文章
来自WikiPedia尝试的错误消息为:

No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://...' is therefore not allowed access.
重申一下:维基百科试图阻止什么样的情况

更新

实际使用的URL为:

  • http://api.nytimes.com/svc/search/v2/articlesearch.json?q=somecity%20somestate&api-键=…
  • http://maps.googleapis.com/maps/api/streetview?size=600x400&location=999%20main%20st,%20somecity%20somestate
  • https://en.wikipedcwodecgia.org/w/api.php?action=query&format=json&list=search&srsearch=somecity%20somestate&callback=jQuery111107555398044642061_1459988112375&_=1459988112376

    • 我不是100%相信维基媒体试图阻止的事情

      同源策略是问题的根源,它是来自web应用程序安全模型的一个指令,要求一个页面(HTML文档等)中的
      script
      s与另一个页面具有相同的来源,以便访问另一个页面的数据

      这是一堵文字墙,防止所有的脚本小子在网站上造成破坏和混乱。和所有长城一样,同源政策也是双向的:如果您有数据/访问/服务要消费/使用,您的选择将受到严重限制

      一个选项是GoogleMaps/API选项,您可以在其中注册、获取密钥、通过身份验证绕过同源策略

      另一个选项是JSONP,其中“p”是围绕JSON数据包装的函数。函数的有效负载JSON可供来自不同来源的
      script
      s访问,因为它作为对象提供,并进入JS全局命名空间。调用该函数会导致浏览器将返回的有效负载作为JavaScript进行评估,并允许它跨源

      第三种选择是CORS——跨来源资源共享。它通过对照预选源列表检查发出请求的源来克服同源策略。如果源站在列表上,则会在服务器的头响应中返回,并授予访问权限


      同样,我也不完全清楚为什么Wikimedia使用JSONP和CORS来克服同源政策,但允许成员站点之间的访问是这一政策背后的一个主要驱动力。

      如果使用Wikipedia API,请看这些答案并没有回答我的问题,这不是关于如何,但是为什么。你想要一个不会失败的请求或解释……很确定这主要是为了传统浏览器支持…@albert:不,这就是我希望了解的。:)