0

ajax リクエストを含む再帰関数を作成しようとしています。ajax request の側で処理される配列に、再帰関数の外側からアクセスしようとしていますが、初期値を返します。

私のコードは次のようになります

  function retreiveData(testArgument)
        {
        $.ajax({
        url:"testManipulate.php",
        type: 'POST',
        data: 'dataString',
        datatype: 'json',
        data: {field : queryData, start : testArgument},
        success:function(jsonQuery)
        {

        $.ajax({
            url: base_uri + path,
            type:'POST',
                    data : jsonQuery,
            success : function(terms){
            var responseJson=JSON.parse(terms); // response JSON generated on download button click
            for ( var g = 0; g < responseJson.hits.hits.length; g++) {
            test[g] = (_generate_list(c, _field_select)); //function
            if(test[g].length!==0){ //Leaving out blank entries
            newTest[k]=test[g].join("; ") + "\n"; //separating each individual values with semi colon
                k++;
        }
        }
        if(testArgument < (4-1)*10)
            {
                   retreiveData(testArgument+10);
            }
            i++
            }
        });
    };
    retreiveData(0);
    alert(newTest.length);

newTest.length のアラートは 0 のみをアラートし、最終的な値、つまり配列の長さは提供しません。何が間違っている可能性がありますか?

4

1 に答える 1

0

これは、ajax 関数が非同期であるためです。コールバック関数で試してください。

function retreiveData(testArgument, callBack)
    {
    $.ajax({
    url:"testManipulate.php",
    type: 'POST',
    data: 'dataString',
    datatype: 'json',
    data: {field : queryData, start : testArgument},
    success:function(jsonQuery)
    {

    $.ajax({
        url: base_uri + path,
        type:'POST',
                data : jsonQuery,
        success : function(terms){
        var responseJson=JSON.parse(terms); // response JSON generated on download button click
        for ( var g = 0; g < responseJson.hits.hits.length; g++) {
        test[g] = (_generate_list(c, _field_select)); //function
        if(test[g].length!==0){ //Leaving out blank entries
        newTest[k]=test[g].join("; ") + "\n"; //separating each individual values with semi colon
            k++;
        }
        callBack(newTest);
    }
    if(testArgument < (4-1)*10)
        {
               retreiveData(testArgument+10);
        }
        i++
        }
    });
};
retreiveData(0, function(newTest){
    alert(newTest.length);
});
于 2012-07-16T09:10:56.740 に答える