这个问题与this问题有关,但我不想使用像链接示例这样的匿名函数,而是使用命名函数,以便尽可能多地重用它。
function parseJSON()
{
$('#dictionary').empty();
$.each(data, function(entryIndex, entry) { /*error here*/
var html = '<div class="entry">';
html += '<h3 class="term">' + entry['term'] + '</h3>';
html += '<div class="part">' + entry['part'] + '</div>';
html += '<div class="definition">';
html += entry['definition'];
if (entry['quote']) {
html += '<div class="quote">';
$.each(entry['quote'], function(lineIndex, line) {
html += '<div class="quote-line">' + line + '</div>';
});
if (entry['author']) {
html += '<div class="quote-author">' + entry['author'] + '</div>';
}
html += '</div>';
}
html += '</div>';
html += '</div>';
$('#dictionary').append(html);
});
}
$(document).ready(function() {
$('#letter-b a').click(function() {
$.getJSON('b.json', parseJSON());
return false;
});
});
这样我就不断收到“'数据'未定义”错误。我知道,我错过了一些微不足道的事情,但我无法理解......
这是JSON文件(与未命名的函数完美配合):
[
{
"term": "BACKBITE",
"part": "v.t.",
"definition": "To speak of a man as you find him when he can't find you."
},
{
"term": "BEARD",
"part": "n.",
"definition": "The hair that is commonly cut off by those who justly execrate the absurd Chinese custom of shaving the head."
},
{
"term": "BEGGAR",
"part": "n.",
"definition": "One who has relied on the assistance of his friends."
},
{
"term": "BELLADONNA",
"part": "n.",
"definition": "In Italian a beautiful lady; in English a deadly poison. A striking example of the essential identity of the two tongues."
}
]
提前感谢任何建议。
答案 0 :(得分:3)
应该是:$.getJSON('b.json', parseJSON);
,然后在函数声明中,将数据添加为我认为的参数。
答案 1 :(得分:1)
在这一行
$.getJSON('b.json', parseJSON());
您正在将调用传递给函数parseJSON
作为回调。
很可能你想传递函数本身,如下:
$.getJSON('b.json', parseJSON);
在您现在拥有的代码中,首先调用parseJSON()
,并将其结果作为回调传递。
此外,您需要确保回调函数的签名符合jQuery期望的内容 - 请参阅:http://api.jquery.com/jQuery.getJSON/
所以在你的parseJSON
函数中,你可能需要添加data
作为参数,如下所示:
function parseJSON(data) {
...your code here...
}
(注意,使用函数调用作为回调并不总是错误的。如果你的函数将实际的回调函数作为返回值传回,那么你可以在那里调用。例如:
function getParseCallBack() {
return parseJSON;
}
然后你可以这样做:
$.getJSON('b.json', getParseCallBack());
我并不是建议您在此时使用它 - 我只是想澄清函数和函数调用之间的区别。)