在jquery .each函数之后没有执行代码

时间:2012-05-20 11:31:27

标签: javascript jquery each

如上所述,在我的.each函数之后不会执行任何代码。我想每个函数准备就绪后会执行每个代码吗?!

继承我的js文件:

function onUploadLoad() {
    $.ajax({
        type: "POST",
        url: "headlines_getter.php",
        dataType: 'json',
        cache: false,
        success: function (data1) {
            console.log("debug 2");
            var i = 0;
            var $element = "";
            $.each(data1[i].main, function () {
                console.log("debug 3 ");
                $element += '<div data-role="collapsible"><h3>' + data1[i].main + '</h3>';
                var j = 0;
                $.each(data1[i].sub, function () {
                    console.log("debug 4");
                    $element += '<span><input type="checkbox" name="headlines" data-mini="true" value="blub" /> ' + data1[i].sub[j] + ' </span>';
                    j++;
                });
                $element += '</div>';
                i++;
                var $elements = $($element).appendTo($('#headlinesgroup'));
                $elements.collapsible();
            });
    alert("ok"); // <- this alert is not shown!!
    console.log("debug 12"); // <- also not this console.log!
        }
    });
}

如果我在每个功能之前做一个警报,一切正常吗?!

提前致谢。 最好的问候,约翰。

3 个答案:

答案 0 :(得分:1)

您的代码中的这一行:

$.each(data1[i].main, function () {

表示迭代data1[i].main的属性/元素。也就是说,假设此时i为0,则期望.main的{​​{1}}属性为数组或对象。鉴于您尝试继续在循环中使用data1[0]并且您自己递增data1[i].main的方式,我怀疑i根本不是数组或对象,因此您的.main都没有{1}}循环正如你所想的那样工作。

在这里猜测,但$.each()数据的结构实际上是这样的:

data1

该结构与您在[ { "main" : "some heading 1", "sub" : [ "item1", "item2", "item3" ] }, { "main" : "some heading 2", "sub" : [ "item1", "item2", "item3" ] }, { "main" : "some heading 3", "sub" : [ "item1", "item2", "item3" ] } ] 循环中尝试执行的操作相对应,但您在尝试使用$.each()的同时单独管理自己的$.each()时出错了{{ 1}}和i循环计数器。您希望使用j 传统的$.each()循环,但就像您尝试同时执行这两项操作一样。假设上面的结构类似于你的结构,你需要做这样的事情:

for

请注意, success: function (data1) { console.log("debug 2"); var $element = ""; $.each(data1, function (i, currentObj) { console.log("debug 3 "); $element += '<div data-role="collapsible"><h3>' + currentObj.main+ '</h3>'; $.each(currentObj.sub, function (j, currentSub) { console.log("debug 4"); $element += '<span><input type="checkbox" name="headlines" data-mini="true" value="blub" /> ' +currentSub + ' </span>'; }); $element += '</div>'; var $elements = $($element).appendTo($('#headlinesgroup')); $elements.collapsible(); }); alert("ok"); console.log("debug 12"); } 循环中没有任何地方可以实际使用$.each()i变量,因为jQuery将j设置为currentObj并且它还将data1[i]设置为currentSub(也是currentObj.sub[j])。

答案 1 :(得分:0)

尝试将error参数添加到$.ajax请求中,例如:

function onUploadLoad()
{
    console.log("debug start");
    $.ajax({
        type: "POST",
        url: "headlines_getter.php",
        dataType: 'json',
        cache: false,
        success: function (data1) {
            console.log("debug success");
        },
        error: function() {
            console.log("debug error");
        }
    });
    console.log("debug end");
}​

由于问题已经改变......

你能在这里发布你的php的回复吗?要查看你是否正在操纵data1它必须被操纵的方式......

答案 2 :(得分:0)

如果你去.each()的文档,你会发现回调函数的原型需要两个参数

  

jQuery.each(集合,回调(indexInArray,valueOfElement))

因此你可以这样做:

$.each(data1[i].main, function (index, element) {

//code inside each

});