2013-09-27 195 views
0

我正在嘗試使用JS的一些JSON,這是由我控制的PHP腳本輸出的。輸出驗證處罰款http://jsonlint.com/但是當我嘗試使用$ .getJSON使用它,它會返回一個解析錯誤:驗證JSON的getJSON解析錯誤

這就是非描述性錯誤:Uncaught SyntaxError: Unexpected token :

這是JSON的來源:http://novaramedia.com/api/txt/

,這是我的jQuery:

$.getJSON('http://novaramedia.com/api/txt/?callback=?', function(data) { 

    console.log(data); 

}).error(function(jqXHR, textStatus, errorThrown) { 

    console.log(textStatus); 
    console.log(errorThrown); 

}); 

的errorThrown變量日誌爲:Error {}

JSON以非常正常的基本方式輸出,並將PHP數組輸入到json_encode中。下面是腳本的輸出線:

header("Content-type: application/json"); 
die(json_encode($output)); 

PHP腳本是幾乎完全一樣一個用於另一個JSON端點[http://novaramedia.com/api/fm/]其中的getJSON不必須有問題的。唯一真正的區別就是直接來自wordpress文章內容的HTML內容的價值。

非常令人沮喪的問題,所以任何幫助非常讚賞:}

+0

額外?callback =?使我這個服務器返回JSONP(這不會解析爲有效的JSON(我在我的iPhone上輸入這個,所以我不能測試這個理論) –

+0

@DaveChen你是完全正確的。這是這個PHP腳本和其他端點,我一定是錯過了,因爲我在另一個端口後面添加了這個端點2.非常感謝,請隨時回答這個問題,我會接受它 – iiz

回答

2

對於JSONP,你需要有一個回調函數前綴。

實施例:

jQuery({...}) 

端點如http://novaramedia.com/api/txt/?callback=jQuery應返回jQuery(... json output ...)之間的響應。

要展開:

你可以使用header('Access-Control-Allow-Origin: \'http://remote-site.com\'');,然後從另一個域自由地訪問您的數據。

好處是其他人不能使用jsonp,但也許這是你的初衷。

+0

是的,我輸出的PHP應該是這個'header( 「Content-type:application/json」); $ json = json_encode($ output); echo isset($ _ GET ['callback']) ?「{$ _GET ['callback']}($ json)」 :$ json;' – iiz

+0

再次感謝@Dave Chen。幾乎總是假設最令人討厭的錯誤。 – iiz