2012-04-21 62 views
0

我正嘗試從另一個域內的服務器訪問某些數據。無法從json-p調用數據

所以我有這樣的PHP代碼:

header('Content-type: application/json'); 
$callback = $_GET[callback]; 
echo $callback . '(' . $CIPHERDATA . ')'; 

上的客戶端上運行的JavaScript是這個

$.getJSON("http://mydomain.gr/zerobin-015/?24c3285?callback=?",function(jsondata){ 
    alert(jsondata.data); 
    alert("hi"); 
}); 

警報顯示不出來。 唯一發生的事情是創建一個腳本標籤,它具有我需要的所有信息,但我無法訪問。

<script src="http://mydomain.gr/zerobin-015/?24c3285?callback=jsonp1335048265855&_=1335048265874"> 
({"data":"{\"iv\":\"smDkNQMt0MIbPABPbAb+xQ\",\"salt\":\"aoFfKV+jHhs\",\"ct\":\"Ns17UQZQN\/ktO2hUW+dPug\"}","meta":{"expire_date":1337635538,"postdate":1335043538}}) 
</script> 

我的json-p格式有什麼問題嗎? 這些數據的正確格式是什麼,所以它們是可訪問的?

+0

返回的jsonp數據應該採用以上格式: ({「data」:「{\」iv \「:\」smDkNQMt0MIbPABPbAb + xQ \「,\」salt \「:\」aoFfKV + jHhs \「,\」ct \「:\」Ns17UQZQN \/ktO2hUW + dPug \「}」,「meta」:{「expire_date」:1337635538​​,「postdate」:1335043538}}) 或者應該是這樣的: [{ 「數據」: 「{\」 IV \ 「:\」 smDkNQMt0MIbPABPbAb + xQ的\ 「\ 」鹽\「:\ 」aoFfKV + jHhs \「,\ 」CT \「:\」 Ns17UQZQN \/ktO2hUW + dPug \「}」,「meta」:{「expire_date」:1337635538​​,「postdate」:1335043538,「remaining_time」:2544592}}]) – vkefallinos 2012-04-22 10:41:50

+0

也許。也許不會。該例中的數據是一個jsonified字符串。在我看來,雙層次的陳述是不必要的。 – Cheeso 2012-04-22 15:06:45

+0

你是什麼意思jsonified字符串?如何這些數據應該被jquery理解? – vkefallinos 2012-04-22 17:39:16

回答

0

問題是對應由PHP要服務的數據format.The JSON字符串是: { 「數據」: 「{」 IV 「:」 + smDkNQMt0MIbPABPbAb xQ的」, 「鹽」: 「+ aoFfKV jHhs」 ,「ct」:「Ns17UQZQNktO2hUW + dPug」}「,」meta「:{」expire_date「:1337635538​​,」postdate「:1335043538}}

在我使用json_encode兩次的php代碼上的錯誤串。

1

這可能是因爲服務器收到錯誤的請求頭,因此不會將JSON響應作爲成功聲明的一部分返回。我敢打賭,如果您爲AJAX調用中的錯誤添加catch,您將在那裏看到JSONP響應。解決此問題的正確方法是確保您將正確的mimetype標頭髮送到服務器,以便在正確的上下文中調用返回的JSONP回調。

+0

不 - 它不是mimetype。這是PHP中的一個錯誤。 – Cheeso 2012-04-22 00:42:22

+0

這使腳本創建一個腳本標記鉻與json inside.But仍然警報命令不工作。而我不能訪問json中的數據與jsondata.data或jsondata.meta – vkefallinos 2012-04-22 10:20:27

+0

我所做的是我改變了PHP的頭文件('content-type:application/json; charset = utf-8');「在php.I認爲這就是你的意思。 – vkefallinos 2012-04-22 10:38:12

2

你做得對。 這只是PHP中的一個運行時錯誤。
在您的PHP腳本中,將$GET[callback]替換爲$GET['callback']。請注意單引號。

編輯

看你的網址,我說你還需要替​​換此:

http://mydomain.gr/zerobin-015/?24c3285?callback=? 

與此:

http://mydomain.gr/zerobin-015/?24c3285&callback=? 

注:第二個?被替換爲&。根據RFC3986,HTTP URL的格式最多隻能調用一個?在任何網址。這種情況可能有點令人困惑,因爲尾隨? 。在$.getJSON()調用中,在運行時jQuery將其替換爲jQuery。那最後?將不會顯示在最終到達網址中。所以最後你應該只有一個? 。


EDIT 2

我只是想一個HTTP GET您JSONP端點。下面是我用的網址:

http://kasem.gr/vasilis-dev/zerobin-015/?xxxxxBigStringHerexxxx=&callback=foo 

xxxxBigStringHerexxx與40個顯然隨機字符和數字組成的字符串替換。我得到的結果:

jsonCallback({"data":"{\"iv\":\"smDkNQMt0MIbPABPbAb+xQ\", 
         \"salt\":\"aoFfKV+jHhs\",\"ct\":\"Ns17UQZQN\/ktO2hUW+dPug\"}", 
       "meta":{"expire_date":1337635538,"postdate":1335043538}}) 

這告訴我你的PHP不正確。當我通過「foo」時,它使用jsonCallback作爲回調函數名稱。另外,出於某種原因,「數據」是一個序列化的json字符串。這似乎是一個不必要的步驟。但功能不匹配是最重要的。如果不明確,我建議你read a little more about JSONP

+0

我做了兩個改變你說,但仍然成功功能不工作,我不能訪問json中的數據與jsondata.data或jsondata.meta – vkefallinos 2012-04-22 10:22:14

+0

我已經提出了我的真實代碼的小提琴。你需要螢火蟲到在iframe的頭部內部查看