2012-04-27 135 views
0

我在我的网站上运行此代码以获取集合上的照片,但我总是最终得到错误。控制台日志显示“parsererror”。我究竟做错了什么?无法通过jQuery调用flickr api

middle.php

<?php die(file_get_contents($_REQUEST['url'])); ?> 

的script.js

//Flickr 
var url = encodeURIComponent('http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=1408bff5f72a4b84b924d13e8562b6a2&[email protected]&photoset_id=72157629903184261&format=json'); 
$.ajax({ 
    url: "middle.php?url="+url, 
    dataType: "json", 
    success: function(){ 
     console.log("yes"); 
    }, 
    error: function(jqXHR, textstatus, errorThrown){ 
     console.log("nooo"); 
     console.log(textstatus); 
    } 
}); 
+0

此代码看起来洁净。也许你的代码中有其他地方出现错误? – Dutchie432 2012-04-27 12:55:10

+1

[同源](http://en.wikipedia.org/wiki/Same_origin_policy)? – prodigitalson 2012-04-27 12:55:16

+1

增加了一个中间人技术 – 2012-04-27 13:58:54

回答

3

如果您有因为跨域安全问题一个问题,你需要创建一个“中间人”页。我将使用PHP作为我的例子。我将创建一个接受不同域URL的middle.php,获取文本/代码并将其返回。我的JS会将此视为同一站点的请求,并且所有内容都将变为花哨。

middle.php

<?php die(file_get_contents($_REQUEST['url'])); ?> 

如果PHP是不是你用什么,你可以在自己的环境中应用了同样的策略。

那么你的Ajax调用看起来像这样..

var url = encodeURIComponent('http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=1408bff5f72a4b84b924d13e8562b6a2&[email protected]&photoset_id=72157629903184261&format=json'); 

$.ajax({ 
    url: "middle.php?url="+url, 
    dataType: "json", 
    success: function(){ 
     console.log("yes"); 
    }, 
    error: function(jqXHR, textstatus, errorThrown){ 
     console.log("nooo"); 
     console.log(textstatus); 
    } 
}); 

不过,我喜欢用getJSON()用于获取JSON数据,更比ajax()

$.getJSON("middle.php?url="+url, function(obj){ 
    if (obj.photoset){ 
     console.log("Success"); 
    } else { 
     console.log("Error"); 
    } 
}); 
+0

我没有得到它...为什么我的index.php不能得到它,但middle.php可以吗? – 2012-04-27 13:08:49

+2

因为index.php使用JAVASCRIPT来获取它,而middle.php不是。同域安全(为了讨论的缘故)仅适用于JS,并受您的浏览器监管。 – Dutchie432 2012-04-27 13:09:36

+0

男人,最后的评论真棒。我不知道。但我仍然得到一个pasererror:S – 2012-04-27 13:30:43