Javascript $。每个都会在Firefox中引发错误(e未定义),但在Chrome中可以正常工作
请参阅此JSFIDLE: 如果您同时拥有Chrome和Firefox,您可以看到它在Chrome中的工作与预期一样,但在Firefox Firebug控制台中,您会看到“TypeError:e未定义” 在JSFIDLE上,错误显示为“TypeError:obj未定义” 我花了几个小时寻找这个虫子,并试图找出它,最后放弃了,来到这里。是什么引起的 以下是要测试的完整代码:Javascript $。每个都会在Firefox中引发错误(e未定义),但在Chrome中可以正常工作,javascript,jquery,firefox,Javascript,Jquery,Firefox,请参阅此JSFIDLE: 如果您同时拥有Chrome和Firefox,您可以看到它在Chrome中的工作与预期一样,但在Firefox Firebug控制台中,您会看到“TypeError:e未定义” 在JSFIDLE上,错误显示为“TypeError:obj未定义” 我花了几个小时寻找这个虫子,并试图找出它,最后放弃了,来到这里。是什么引起的 以下是要测试的完整代码: <html> <body> <div id="x"></div>
<html>
<body>
<div id="x"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
getVideos('cats');
});
function getVideos(query){
var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=2&q='+query+'®ionCode=us&type=video&fields=items(id)&key=AIzaSyCCOnozV0lEfnjfMTjpc4TFExAeIGJ6Fh0';
$.ajax({
url: url,
success: function(data){
appendVideos(data);
}
});
}
function appendVideos(data){
// works here
console.log(data);
// but not in $.each
$.each(data.items, function(i, item){
$('#x').append(item.id.videoId + '<br>');
});
}
</script>
</body>
</html>
$(文档).ready(函数(){
获取视频(“猫”);
});
函数getVideos(查询){
var url='1〕https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=2&q=“+query+”®ionCode=us&type=video&fields=items(id)&key=AIzaSyCCOnozV0lEfnjfMTjpc4TFExAeIGJ6Fh0”;
$.ajax({
url:url,
成功:功能(数据){
附加视频(数据);
}
});
}
功能视频(数据){
//在这里工作
控制台日志(数据);
//但不是每个美元
$.each(data.items,function(i,item){
$('#x')。追加(item.id.videoId+'
');
});
}
看起来数据是作为字符串而不是像您想象的对象传递到视频中的。我做了一个测试
for(i in data) {
alert(i+'='+data[i]);
}
它就像一根绳子
这修正了它:
$.ajax({
url: url,
dataType: 'JSON',
success: function(data){
appendVideos(data);
}
});
}
看起来jQuery并没有在Firefox中将响应自动解析为json,而是将其解释为字符串 如果将“成功”功能更改为以下功能,则应能正常工作:
success: function(data){
if(typeof(data) === 'string') {
data = JSON.parse(data);
}
appendVideos(data);
}
除了其他答案,为什么不直接使用
在jQuery 1.9.1的第622行中发现了错误,这是由于您传递的对象是未定义的。第622行调用了
obj.length
,因为undefined
没有名为length的属性,所以它抛出并出错
将
dataType:'JSON'
添加到您的$中。ajax
请求将修复此错误当我在FF中发出警报(data.items)时未定义。在ajax请求中将数据类型设置为JSON会强制执行此操作。我们都会遇到忽略明显错误的情况。仅供参考,如果您警报(数据)
如果您的数据被正确解析为JSON对象,它应该返回[Object]
。我不知道哪个浏览器更适合这里。我认为Chrome在这里隐式解析为JSON是错误的。如果我看到两个浏览器都有错误,我会更快地发现错误。无论如何,谢谢您的回答。您希望从服务器返回的数据类型。如果未指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将生成XML,在1.4中JSON将生成JavaScript对象,在1.4中脚本将执行脚本,其他任何内容都将作为字符串返回)。可用的类型(以及作为成功回调的第一个参数传递的结果)是:这都是猜测。jQuery正在猜测,Chrome似乎根据内容正确地计算出了MIME类型。我几乎从不包含数据类型。我可以开始了。但是这更多的是关于浏览器而不是jQuery,不是吗?
var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=2&q='+query+'®ionCode=us&type=video&fields=items(id)&key=AIzaSyCCOnozV0lEfnjfMTjpc4TFExAeIGJ6Fh0';
$.getJSON(url, function(data)
{
appendVideos(data);
});