2011-08-05 138 views
3

我想從另一個頁面獲取一些html代碼並將其插入另一個網站上的頁面。 所以問題是獲得跨域$ .get()調用工作。 但大多數人推薦使用json來解決問題。jquery getjson跨域問題

這是php文件我用

<?php 
$arr = array(array("test","this is a string")); 
$arr['name'] = "response"; 
echo $_GET['callback'] . "('" . json_encode($arr) . "')"; 
?> 

這是我使用的功能,它使用jQuery的

function getJson(site, callback){ 
    $.ajax({ 
     url:site, 
     dataType: 'JSONP', 
     success:function(json){ 
      callback(json); 
     }, 
     error:function(){ 
      //handle error 
     }, 
    }); 
} 

這是我訪問

getJson("http://websitename.com/page.php?callback=?", function(data){ 
    alert(data); 
}); 

警報顯示此字符串

('{"0":["test","this is a string"],"name":"response"}') 

我的問題是,我怎麼能訪問數據的變量,就像它是JSON

data.test; 
data["test"]; 

編輯:再次

解決我自己的問題我用

$.parseJSON(data) 

回答

0

你不能。

我不知道是誰告訴你使用json,但他們錯了。 Ajax(不是json,json是別的)不能跨域。並且如果域名不同,則無法從說出iFrame讀取HTML。

您可以使用服務器端代理來爲你,如果你必須這樣做,但要記住請求將在服務器,而不是客戶端的情況下。

編輯:

我剛剛意識到你正在做jsonp! (我還以爲你試圖讓HTML)

所有你需要做的就是添加:

dataType: 'jsonp' 

請求,它應該工作。

+0

實際上,Ajax可以[cross domains](http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing)。 – Malvolio

+0

@malvolio,因爲它不被所有的瀏覽器支持,對我來說,它不算。 – Ariel

+0

* Javascript *不受所有瀏覽器支持。在某個時候,你必須放棄過時版本的錯誤瀏覽器。 – Malvolio

0

您要使用JSONP,這將無法​​正常工作。當您檢索特殊格式的JSON數據時,JSONP正常工作。你想獲得的數據是HTML,而不是JSON,如碧浪指出,並不會被正確格式化。亞採的建議是正確的,如果你有在遠程服務器控制;否則,是的,你需要一個服務器端代理(在本地服務器上)爲林依晨說。

編輯:如果你要改變這個問題,我會改變答案。

我可以看到你在做錯誤的唯一的事情就是在URL中指定callback - jQuery將照顧這對你 - 你是在大寫書寫JSONP。我不能相信這其中的任何一個其實都是問題。如果Firebug net選項卡沒有顯示請求,請逐步瀏覽jQuery代碼(它並不那麼複雜)並查看原因。

+0

我現在實際上不確定他是否試圖獲取HTML。我想他可能會試圖讓jsonp工作。 – Ariel

+0

我正在使用html中的一個變量獲取json數據。它仍然可以工作並以純文本形式返回。 – Drake

+0

我已經解決了在我的問題中指定的跨域獲取json數據的原始問題。仍然存在的問題是將其從純文本字符串格式化爲使用括號或名稱訪問它的json格式。 – Drake