2

作为免责声明,我是 jQuery 的清道夫/黑客,而不是熟练的开发人员。

我正在尝试构建 Twitter 式的分页,这几乎可以正常工作。

我正在使用 PHP 和 MySQL 以 JSON 格式检索数据,这些数据以以下形式到达我的手中:

[
    {
        "bookmark_id":"5507",
        "creation":"Mon 16th Jul 2012",
        "url":"http:\/\/www.bbc.co.uk\/news\/science-environment-18833386",
        "title":"Light trick to see around corners ..."
    }

...

]

代码本身是:

<script type="text/javascript">
    function paginate(limit) {
        if (limit == 0) { count = 0; } else if (limit > 0) { count += 10; }
        $(".flash").show();
        $(".flash").fadeIn(400).html("Loading...");
            var data = "limit=" + count;
            $.ajax({
                type: "POST",
                url: "<?php echo config_item('base_url'); ?>topics/jq_get_bookmarks_for_topic_by_tag_as_object/" + <?php echo $results['select_topic'][0]['topic_id']; ?>,
                data: data,
                cache: false,
                success: function **(index, element)** {
                    alert(index);
                    $(".flash").hide();
                    $(".load-link").addClass("link-none");
                    for (var i=0;i<element.length;i++) {
                        $("#data-topics-bookmarks-tags").append('<tr><td>[<a href="<?php echo config_item('base_url'); ?>bookmarks/view/' + **element.bookmark_id** + '">View</a>] [<a href="<?php echo config_item('base_url'); ?>bookmarks/visit/' + element.bookmark_id + '" target="_blank">Link</a>] <a href="<?php echo config_item('base_url'); ?>bookmarks/edit/' + element.bookmark_id + '" title="Edit ' + element.title + '">&lsquo;' + element.title + '&rsquo;</a></td><td>' + element.creation + '</td></tr>');
                    }
                }
            }
        );
    }
    paginate("0");
</script> 

触发加载更多数据的链接是:

<p><a href="#load" onclick="paginate('10')">Load Bookmarks</a></p>

一切正常......除了我实际上能够访问数据并将其显示为“未定义”以外的任何内容之外。

在我标记为粗体的两个区域中,我已经尝试了所有我能想到的组合。

当我单击加载链接时,它会按预期附加表格,但每个项目都是“未定义的”。

是的,数据是如上所述的;我从警报(索引)中获取数据。

我敢肯定,对于我们当中的精通者来说,这是一个简单的解决方法,但我不在其中。

4

1 回答 1

3

默认情况下,.ajax 函数不会将返回的 JSON 数据解析为对象。您必须自己调用 $.parseJSON(index) 或在 .ajax() 设置中将 dataType 设置为“json”,如下所示:

$.ajax({
    type: "POST",
    dataType: "json",
    ...

此外,成功函数的返回参数是原始数据、textStatus 和 jqXHR 对象。因此,出于您的目的,您真正需要的只是数据,如果您包含 dataType,这些数据将被自动解析为 JSON。因此,您可以将“成功”参数更改为:

success: function (element) {

除非您需要它们,否则您不需要处理 textStatus 和 jqXHR 参数。

于 2013-05-09T08:27:48.783 回答