2013-11-22 46 views
1

我正在嘗試在某些外部JSON電話列表中進行本地測試。即使JSON有效,jQuery JSON parsererror

JSON = https://www.o2.co.uk/shop/homepage/scripts/phoneList.json

我已閱讀在一個單獨的線程,要克服允許起源/跨領域問題,你可以通過「回調=?」到網址的結尾。這似乎工作正常,因爲現在devtools網絡標籤我可以看到文件被拉好。

但是,我從來沒有得到它進入成功回調函數。它始終帶回parsererror

代碼根據jsonlint.com

如下面的代碼片段是100%有效:

$.ajax({ 
      type: 'GET', 
      url: 'https://www.o2.co.uk/shop/homepage/scripts/phoneList.json?callback=?', 
      contentType: 'application/json; charset=utf-8', 
      cache: true, 
      dataType:'json', 
      success: function(response) { 
      console.log(response); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
      console.log(jqXHR); 
      console.log(textStatus); 
      console.log(errorThrown); 
      } 
     }); 

任何想法表示歡迎,因爲我很好,真正卡住。

謝謝。

+1

你正試圖在似乎不支持它的資源上使用'jsonp' –

+1

只是通過'callback =?'沒有提出請求跨域服務器端需要支持這樣的響應 –

+0

不完全確定,但從Url返回的JSON是一個數組而不是一個對象 - 這可能會擾亂解析器。 – vogomatix

回答

0

JSONP僅在服務器支持它時才起作用。服務器需要做的是取回你的回調參數,並將json數據封裝在一個帶有該名字的函數調用中。

所以當https://www.o2.co.uk/shop/homepage/scripts/phoneList.json

[{ 
"handset":"Alcatel 10.30 Black", 
"link":"/shop/phones/alcatel/10.30-black/" 
}] 

https://www.o2.co.uk/shop/homepage/scripts/phoneList.json?callback=MyCallback響應應該回應:

MyCallback([{ 
"handset":"Alcatel 10.30 Black", 
"link":"/shop/phones/alcatel/10.30-black/" 
}]); 

如果服務器沒有做到這一點,JSONP不能工作。也許O2不希望你使用他們的數據。