2017-02-12 55 views
-2

因此,我最近学会了如何进行AJAX调用,并知道在使用来自外部服务器的API时需要使用JSONP。正如我从sitepoint了解到的,有人指出,JSONP的不同之处在于它被封装在一个函数中,通过脚本标签可以访问它。将数据归类为JSONP以及如何使用普通的JavaScript获取它?

SitePoint链接:https://www.sitepoint.com/jsonp-examples/ E.g http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json

虽然我不明白的是为JSONP Flickr的API。

Flickr API链接JSONP: https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=Flickr API链接XML: https://api.flickr.com/services/feeds/photos_public.gne

它似乎是返回XML数据。更让我困惑的是,这种类型的xml被jQuery的$ .getJSON()所接受,而它在xml中的原始api也会导致相同的原始策略错误。我可以在它们之间找到的主要区别是几个href的变化。

那么是什么让XML的Flickr JSONP,以及如何在普通的JavaScript中使用它的Ajax调用?

任何对此的反馈,将不胜感激:)为清楚起见

更新:

Here I have working code using the flickr XML that does an ajax call with jQuery. 

链接:https://jsfiddle.net/Jonathan002/05ao4d87/

我被教导,这只是通过JSONP中成为可能树屋。 https://teamtreehouse.com/library/ajax-basics/ajax-and-apis/displaying-the-photos。如果我没有使用JSONP来完成这项任务,那么我能够绕过同样的原产地政策呢?

+1

*“那么是什么让XML的flickr JSONP ......”*没有,你说的链接的回应JSONP没有。它返回XML。例如,我建议做更多的研究,[阅读JSONP维基百科文章](http://en.wikipedia.org/wiki/JSONP#JSONP)。 –

回答

2

您说过的链接返回JSONP不,它返回XML。 flickr documentation告诉我们您需要在URL中使用format=json;你也想填写?这样的名称,因此你可以命名回调函数(尽管如果你使用jQuery,它会为你做)。例如:https://api.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=callbackName

注意:他们称之为JSON,但事实并非如此。这是JSONP。 JSONJSONP是不同的东西。尽管(不是所有的JSONP响应都是),但对回调调用中的位是有效的JSON。

这里有JSON的例子:

{"foo": "bar"} 

这里的回调中使用有效的JSON JSONP的例子:

callbackName({"foo": "bar"}) 

这里的回调中使用无效的JSON JSONP的例子(但因为JSONP和JSON是不同的东西):

callbackName({foo: "bar"}) 

我怎样才能得到它与纯JavaScript?

jQuery documentation for $.ajax描述了如何使用jQuery进行JSON调用。在这种情况下:

$.ajax({ 
 
    url: "https://api.flickr.com/services/feeds/photos_public.gne?format=json", 
 
    dataType: "jsonp", 
 
    jsonp: "jsoncallback", 
 
    success: function(data) { 
 
     // Use the data here 
 
     console.log("The title is: " + data.title); 
 
    }, 
 
    error: function() { 
 
     // Handle error here 
 
     console.log("Error loading the data"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意,因为Flickr的是为控制回调的名称的参数使用非标准的名称,你需要的jsonp选项告诉jQuery的什么参数名使用。

+0

这里我有使用flickr XML的工作代码,它使用jQuery进行ajax调用。 https://jsfiddle.net/Jonathan002/05ao4d87/ 我被教导说,这只有通过树屋中的JSONP才能实现。 https://teamtreehouse.com/library/ajax-basics/ajax-and-apis/displaying-the-photos。如果我没有使用JSONP来完成这项任务,那么我能够绕过同样的原产地政策呢? – Jonathan002

+0

对不起,当我试图让别人输入并提前发布时,输入了文字。我刚才更新了答案。 – Jonathan002

+0

@ Jonathan002:您正在使用JSONP,因为您在'flickrOptions'中使用了'format:“json”',它会附加到URL中。 (您可以在浏览器的“网络”选项卡中看到此内容;由于这些选项,“$ .getJSON”请求的实际URL是https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback = jQueryblahblahblah&tags = Dog&format = json&_ = 1486914520263'('jsoncallback'和'_'的值有所不同)我有点惊讶,它没有使用'jsonp'选项,但我猜jQuery只是寻找'callback =?'不用担心它是否是部分匹配 –

相关问题