2012-04-27 127 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