jQuery.InArray()+动态JSON数组

时间:2014-03-06 14:14:15

标签: javascript php jquery ajax json

我有一个Ajax请求,它返回一个格式如下的JSON数组: [101,102] 数组中的数据是存储在数据库中的图像ID。

我想要做的是在页面上显示所有图像,每个图像旁边都有一个复选框。如果image_id在上面的数组中,那么我想要选中复选框。

除了选中复选框

外,Everrything工作正常

以下是我的代码片段:

$.get('get_thumbs.php?category=' + selected,
function (data) {
    $.get('get_selected_photos.php?product_id=' + product,
        function (returned) {
            po = $.parseJSON(returned);
        });
    var d = $.parseJSON(data);
    if (d != null) {
        var fieldWrapper = $("<ul>");
        $.each(d, function (index, value) {
            var checked = "";
            var fName = $("<li><img src=\"../" + value["thumb"] + "\"</li>");

            var fType = $('<input>', {
                type: "checkbox",
                id: "checkbox" + value["photo_id"],
                value: value["photo_id"],
                checked: ($.inArray(value["photo_id"], po) > 0 ? true : false)
            });

            fType.click(function () {
                var intId = $(this).val();
                if ($(this).is(':checked')) {
                    var sel = $(this).val();
                    $.get('get_sizes.php?photo_id=' + sel,
                        function (data) {
                            var d = $.parseJSON(data);
                            var tableWrapper = $("<div class=\"fieldwrapper\" id=\"field" + intId + "\"/>");
                            var tName = d;
                            tableWrapper.append(tName);
                            $("#buildyourform").append(tableWrapper);
                        });
                } else {
                    $("#field" + intId).slideUp(function () {
                        $(this).remove();
                    })
                }
                $("#buildyourform").show();
            });
            fType.unbind("click", function () {
                $(this).parent().remove()
            });
            fName.append(fType);
            fieldWrapper.append(fName);
        });
        $("#avail_images").append(fieldWrapper);
    } else {
        $("#avail_images").html("<h2>There are currently no images associated with this Category.</h2>");
    }

问题是($.inArray( value["photo_id"], po ) > 0 ? true : false)似乎无法正常工作。变量'po'已经从AJAX调用填充,所以也许我错过了一些东西。

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

我建议你在你的代码中加入Underscore.js,它会有很大的改进,它会让你的生活更轻松。它非常容易阅读,它具有跨浏览器支持。

http://underscorejs.org/

真的很冗长。

_.isArray(someVariable); // boolean return

它还为操作数据提供了许多功能。 例子:

_.isEmpty([]); // validates empty string, empty arrays, and empty objects {}
_.last([1, 2, 3, 4, 39]); // returns the last item on array

看看

干杯