0

上で述べたように、.each 関数の後にコードは実行されません。各関数の準備ができたら、すべてのコードが実行されると思っていましたか?!

Heres私の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!
        }
    });
}

each-function の前にアラートを出している場合、すべて正常に動作しますか?!

前もって感謝します。よろしく、ジョン。

4

3 に答える 3

1

あなたのコードからのこの行:

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

のプロパティ/要素を反復すると言いますdata1[i].main。つまり、iその時点で が 0 であるとすると、 の.mainプロパティがdata1[0]配列またはオブジェクトであると想定されます。ループ内で使用し続けようとしている方法を考えると、自分自身をdata1[i].mainインクリメントしているため、それは配列でもオブジェクトでもないと思われるため、どちらのループもあなたが思っているようにまったく機能していません。i.main$.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()ij$.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()ループでも、実際には変数ij変数を使用していないことに注意してください。jQuery は に設定currentObjされてdata1[i]おり、また に設定されているcurrentSubためcurrentObj.sub[j]です (これも ですdata1[i].sub[j])。

于 2012-05-20T12:05:16.837 に答える
0

try to add the error param to the $.ajax request like :

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");
}​

Since the question has changed...

Can you post here the response of your php ? To see if you're manipulating the data1 the way it has to be manipulated...

于 2012-05-20T11:40:58.097 に答える
0

.each() のドキュメントにアクセスすると、コールバック関数のプロトタイプに 2 つのパラメーターが必要であることがわかります。

jQuery.each(コレクション、コールバック(indexInArray、valueOfElement))

したがって、次のようにすることができます。

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

//code inside each

});
于 2012-05-20T11:44:34.033 に答える