使用jQuery获取json数据 - 命名函数与匿名

时间:2012-03-02 12:57:03

标签: json jquery

这个问题与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."
      }
    ]

提前感谢任何建议。

2 个答案:

答案 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());

我并不是建议您在此时使用它 - 我只是想澄清函数和函数调用之间的区别。)