【发布时间】:2014-02-06 18:57:37
【问题描述】:
我正在尝试使用 jQuery 加载一些 JSON,但根据我使用的 jQuery 版本,我得到的结果好坏参半。
第一页 (http://iaviglobal.com/json-3.html) 使用 jQuery 1.8.3 并且运行良好!该页面上的所有内容都是从我服务器上的 .json 文件中提取的。
然而,我的第二页 (http://iaviglobal.com/json-4.html) 使用 jQuery 1.10.2 和 jQuery Migrate 1.2.1。我的 JSON 调用在这里不起作用!这是我的代码:
$.getJSON('/json/products.json', function(data) {
alert ("json loaded");
var output="";
for (var i in data.products) {
output+="<div class='product-line-item wrapper'><div class='product-image'><img src='/img/" + data.products[i].fileName + ".png alt='' width='150' height='100'></div><div class='product-model'>" + data.products[i].modelNumber + "</div><div class='product-specs'><ul><li>" + data.products[i].brightness + " Lumens</li><li>" + data.products[i].resolution + " Resolution</li><li>" + data.products[i].contrast + " Contrast Ratio</li></ul></div><a class='get-a-quote trigger-quote-modal'>Get a Quote</a><a class='download-pdf' href='/download/" + data.products[i].fileName + ".pdf'>Download PDF</a></div>";
}
output+="";
document.getElementById("product-line-container").innerHTML=output;
});
谁能向我解释发生了什么变化?我认为自 1.8.3 以来有些东西已被弃用,但我不知道是什么。
我在这里创建了第三个页面:http://iavi.com/glored/json-5.html。此页面已精简,仅包含一个脚本来通知我 jQuery 是否成功加载,然后是来自 http://api.jquery.com/jquery.getjson/ 的 JSON 代码逐字结合 jQuery 1.10.2 和 jQuery Migrate 1.2.1。
$.getJSON( "ajax/test.json", function( data ) {
var items = [];
$.each( data, function( key, val ) {
items.push( "<li id='" + key + "'>" + val + "</li>" );
});
$( "<ul/>", {
"class": "my-new-list",
html: items.join( "" )
}).appendTo( "body" );
});
还是不行!
控制台只说“未捕获的类型错误:无法调用未定义的方法‘getJSON’”
【问题讨论】:
-
第一页对我来说很好,在第二页中
$未定义,但jQuery可用,因此您可以将代码包装在jQuery(function($) {...中 -
“控制台只显示“未捕获的类型错误:无法调用未定义的方法‘getJSON’””重新读取该错误。它完全解释了为什么您的 ajax 请求不起作用。
getJSON在undefined上不存在。这意味着$是undefined和undefined预计没有getJSON方法。您要么没有包含 jquery,要么已将其置于无冲突模式。 -
@KevinB 事情是 jQuery 已加载(页面加载时弹出的警报证实了这一点,对吗?)。而且您还暗示问题可能在于我已将 jQuery 置于无冲突模式。但是这里的其他两个回复表明我确实将其置于无冲突模式来修复它。那么它是哪一个?就像我的帖子说的那样,我在两个不同的页面上加载了完全相同的代码。并且只有加载 jQuery 1.10.2 的页面不起作用。 1.8.2 工作正常!
-
我只是在指出事实。而且,答案/cmets 并没有告诉您将其置于无冲突模式,而是告诉您编写代码,就好像它已经处于无冲突模式一样(通过查看错误消息,建议它实际上处于无冲突模式。)如果他们告诉您将其置于无冲突模式,他们会告诉您使用
$.noConflict()(这不是必需的,不要妄下结论)跨度>