2014-02-14 69 views
0

我有一個jsonp調用到另一個域獲取數據,但它只是json,沒有包裹在一個函數中。所以,它誤解了一個parserror。但是,數據在那裏 - 我可以看到它。是否可以使用從jsonp調用返回的「壞」數據?

即使出現此錯誤,是否可以使用返回的數據?基本上,我可以以某種方式將帶有錯誤的數據變成變量嗎?

基本呼叫:

$.ajax({ 
    type: 'GET', 
    url: api_url, 
    jsonpCallback: 'jsonCallback', 
    dataType: 'jsonp', 
    success: function(json) { 
     console.log('success'); 
     console.log(json); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("error: " + textStatus); 
    } 
}); 

錯誤:Uncaught SyntaxError: Unexpected token :

檢查錯誤(鉻)顯示有效的JSON,但不是JSONP ...

+1

JSONP只在服務器支持它的情況下才有效。如果服務器沒有,請查看它是否支持CORS。如果不是,那麼你不能使用這些數據。解決方法是在您的Web服務器上使用代理。 –

+0

另外,你爲什麼要設置'jsonpCallback'參數? –

+0

@RocketHazmat我基本上設置每個參數試圖看看發生了什麼。忘了刪除這個問題。至於第一條評論,我想到了很多。只是我可以看到數據!它就在那裏!我想要它! – hookedonwinter

回答

1

你也許可以看到JSON調試工具中的數據,但除非格式正確,否則無法在代碼中訪問它。 JSONP通過在頁面的<head>上添加一個<script>標籤。這就是它繞過同源政策的方式。 JSONP不是JSON,它只是一個JavaScript文件;一個函數調用。如果它未包含在函數調用中,則不是JSONP,因此不能這樣使用。

您正在使用的服務器需要支持JSONP才能使用跨域數據。看看他們是否支持CORS,如果他們這樣做,那麼你可以嘗試。

如果服務器不支持任何跨域技術(JSONP或CORS),那麼您唯一的選擇是在您自己的虛擬主機上創建一個腳本來充當代理。對您的服務器進行AJAX調用,並讓它傳回JSON數據。

相關問題