2011-03-08 55 views
5

使用Google Chrome的JavaScript控制檯收到「資源解釋爲腳本但通過MIME類型application/json傳輸」的錯誤消息。使用Youtube的JavaScript API「將資源解釋爲腳本,但使用MIME類型application/json進行傳輸」

我目前正在運行的我的本地計算機上的下面的代碼:

var URL = ""; 
var YOUTUBE_ROOT = "http://gdata.youtube.com/feeds/api/videos?alt=jsonc&v=2"; 
var start_index = "&start-index=1"; 
var callback = "&jsonp=?" 
function searchYouTube() 
{ 
    var q = encodeURIComponent(jQuery("#query").val()); 
    var query = "&q="+q; 
    URL = YOUTUBE_ROOT+start_index+query+callback; 
    alert(URL); 
    $.getJSON(URL, function(data) { 
     $.each(data.items, function(i, item) { 
      alert(item); 
     }); 
    }); 


} 


jQuery(document).ready(function() { 
    jQuery("#searchYouTube").click(searchYouTube); 

}); 

我想知道是什麼原因造成的錯誤?

我試過用'callback =?' ,'jsoncallback =?'爲回調,但所有導致 相同的錯誤消息。

我可以知道我該如何解決這個問題?

最好的問候。

回答

8

由於您使用JSONP,你應該這樣恕我直言代碼時:

$.ajax(URL, { 
    crossDomain:true, 
    dataType: "jsonp", 
    success:function(data,text,xhqr){ 
     $.each(data, function(i, item) { 
      alert(item); 
     }); 
    } 
}); 

正確的參數是callback但jQuery的生成一個自動的,所以不要指定。

+0

哇感謝!好像我仍然有很多要學習JavaScript和JQuery。數據現在正在顯示。 – DjangoRocks 2011-03-08 13:34:35

+0

當您需要訪問跨域數據時使用JSONP。基本上這只是一個竅門:JavaScript頁面中插入了JavaScript腳本,並且響應中嵌入了JavaScript回調。 – jujule 2011-03-08 14:28:18

+4

這並不能解決所提到的錯誤('資源解釋'等等),至少不適合我,以及仍然使用'application/json'時。它只在用作'text/javascript'時消失,它沒有任何明顯的副作用。 – kasimir 2012-03-22 13:35:09

4

這是一個警告,而不是一個錯誤,不應該阻止你的代碼工作。

由於錯誤的內容類型爲YouTube提供數據服務,因此存在故障。

0

這是Chrome的一個怪癖,它如何區分來自典型瀏覽器請求的XHR請求。

爲了防止出現消息,並允許chrome在控制檯中將響應很好地呈現爲json,請在請求URL中附加查詢字符串。

e.g

var xhr_object = new XMLHttpRequest(); 

var url = 'mysite.com/party_in_my_pants'; // Using this one, Chrome throws error 

var url = 'mysite.com/party_in_my_pants?'; // This one, Chrome is sexy. 

xhr_object.open('POST', url, false); 
相關問題