2012-10-10 39 views
2

可能重複:
json Uncaught SyntaxError: Unexpected token :爲什麼JsonP不起作用?

是否JSONP取決於服務器的支持,以返回正確的響應?

我收到了這個請求,我回來的是js錯誤。

$.getJSON('myURL?q=keyword&callback=?', function(data){console.log(data)}); 

即使角度JSONP方法是行不通的:

http://jsfiddle.net/neoswf/tckGG/5/

控制檯>> JS錯誤Uncaught SyntaxError: Unexpected token :

是否JSONP取決於一些服務器實現?

已解決!!!

此問題與其他人不同,因爲沒有其他答案提及代理解決方案。

回答

3

服務器不返回JSONP,它返回JSON。 JSONP結果是包含在函數調用中的JSON結果。

例子:

callback873659823745({"destino":"http://...", ... }) 

如果無法使服務器返回JSONP,則需要請求服務,並返回JSON結果包裹的JSONP結果的代理服務器。

碰巧,我剛剛在jsonp.guffa.com上設置了一個代理,如果您無法自行設置,則可以使用該代理。

演示:http://jsfiddle.net/Guffa/tckGG/6/

+0

非常感謝! – neoswf

+0

@ Guffa我怎麼寫我自己的?如果我將使用您的代理服務器,恐怕它可能對您來說太昂貴... – neoswf

+0

沒關係。已經在網上發現了很少的教程... http://blog.jsonpify.com – neoswf

2

是的,jsonp需要服務器支持。服務器需要將json包裝在json *「填充」部分,這是一種客戶端根據響應數據定義和執行的方法。

+0

有沒有辦法繞過它? 如果沒有,並且如果服務器沒有實現CORS,比我有什麼選擇實現我的目標? – neoswf

+1

@NeoSwf:您必須使用代理... –

+0

謝謝@FelixKling。你可以解釋嗎?代理如何不會調用跨域規則? – neoswf

2

因爲您的網址沒有返回JSONP。它正在返回JSON。

{"destino":"http://www.buscape.com.br","palavras":["tv lcd 32","tv led","tv led 32","tv led 40","tv","tv led 42","tv lcd","tv lcd 42","tv lcd 26","tv 3d","tv lcd 40","tv 32","tv led 46","tv 42","tv lcd 22","tv led 32 full hd"]} 

對於一個例子,如果JSONP,從flickr檢查返回值。它返回

callbackToExecute({... JSON Object ...})