0

次のコードでは、関数内のアラートは正常に機能しますが、2 番目のコードには未定義の変数がありますが、関数の外側で変数を宣言しています。どうしてこれなの?

var data = [];
$.post(
        'matchEngine.php', 
        function(data) {
                for (var i = 0, len= data.length;i <len; i++) {
                for ( h = 0, len2= data[i].length;h <len2; h++) {

                data[i][h][0]=(data[i][h][0])*30;
                data[i][h][1]=(data[i][h][1])*30;
                data[i][h][3]=data[i][h][3].replace(/\"/,"");

                }
                }
                alert(data[0][0][0]);
            }

        ); 
alert(data[0][0][0]);

同様の問題が発生している場合は、次の AJAX 呼び出しから応答を返す方法を教えてください。決定的な説明と答えがあります。

4

3 に答える 3

1

data関数パラメータ内と関数外の参照は異なる変数です。最初のケースでは、それはグローバル スコープにあり、2 番目のケースではローカル スコープにあります..それらは完全に異なります。

例は問題を示しています....

    var data=2;//this
    function fun(data){ //and this are different
              alert(data);
     }
     var data2=3;
     fun(data2);
于 2013-06-07T13:26:36.820 に答える
0

これを試すことができます:

var data = [];
var myRequest = $.post(
    /* your stuff */
); 
myRequest.done(function() { alert(data[0][0][0]); })
于 2013-06-07T13:35:28.097 に答える
0

dataピンクパンサーが指摘したように、コールバック内のローカル変数は、関数外の変数$.postと同じ変数ではありません。data

さらに、$.post は非同期であるため、コールバックを渡すか、返される遅延オブジェクトを使用して応答にアクセスする必要があります。

$.post('matchEngine.php').then(function(data){alert(data)})

たとえば、応答を他の関数に渡したい場合は、次のようにします。

function doPost(url){
    return $.post(url);
}

function processResponse(response) {
    alert(response);
}

responsePromise = doPost("matchEngine.php");
responsePromise.then(processResponse);

余談ですが、Promiseの代わりにコールバック スタイルを使用する場合は、$.post の代わりに$.ajaxを使用することをお勧めします。$.ajax はエラー コールバックを提供しますが、$.post は提供しません。

于 2013-06-07T13:25:58.983 に答える