0

私はこれを理解するために最後の30分を費やしました.

次の場合を想定してみましょう。

<script>
    var x = 0 ; //global variable
    function compute() {
        x = x+1; 
    }
</script>

後で関数にアクセスできるように、x の値をインクリメントする必要がありますか?

次のコードがあります。

var id1 = 0;
var id2 = 0; 
$.ajax({
    url: "http://localhost/twee/chat/comment",
    type: 'POST',
    data: form_data,
    success: function(data) {
        var data1 = parseInt(data);
        id1 = id2 = data1; 
    }
});

後の関数で id1 と id2 の値 (0 として宣言したので更新) にアクセスできるようにしたいと考えています。

ただし、値はゼロのままであり、data1 は正常に取得されます。

4

3 に答える 3

2

ID をいつ使用しようとするかはわかりませんが、ajax 呼び出しは非同期であるため、次のように変数を読み取ろうとすると:

var id1 = 0;
var id3 = 0 ; 
$.ajax({
         url: "http://localhost/twee/chat/comment",
         type: 'POST',
         data: form_data,
         success: function(data) {
              var data1 = parseInt(data, 10);
          id1 = id2 = data1;

         alert(id1) // Will alert whatever number returned as data. 
}});

alert(id1) // Will alert 0

2 番目のアラートは ajax 呼び出しとほぼ同時に呼び出され、その時点ではデータはまだ更新されていませんが、最初のアラートはデータが返されるまで呼び出されません。ID を使用する場合は、success-callback 内、または success-callback 内で呼び出される関数内で使用する必要があります。

于 2012-06-12T17:39:21.523 に答える
0

あなたの ajax コールバックは非同期です。successリモートサーバーが応答するまで、関数は実行されません。完了すると、関数が実行され、変数がインクリメントされます。

これは Javascript プログラミングの難しさであり、一般的な非同期プログラミングです。一度に多数のボールが宙に浮いており、それらがどのように操作を完了し、いつ結果を確認できるかを判断するのは困難です。

$.ajax() 呼び出しを「サーバーから結果を取得する」と考えるのは非常に簡単ですが、実際には「サーバーにリクエストを送信する」ことです。いつ終了するかは誰にもわかりません。

于 2012-06-12T17:42:34.920 に答える
0

id1コールバックの実行後にの値を確認していますsuccessか? ajax非同期操作であるため、サーバーから応答が返されるまでコールバックは呼び出されません。

于 2012-06-12T17:38:31.020 に答える