2011-03-08 59 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); 
相关问题