0

jquery がコンテキストを処理する方法を理解したいと思います。私はこのコードを持っています:

var formHtml;

jQuery.get("form2.htm", function (data) {
    formHtml = data;
});

alert(formHtml);

それが何をするか、form2.htmlページからデータを取得し、formHtml変数をそのデータに設定して、別の場所で使用できるようにしますが、未定義になることを警告すると. 足りないものはありますか?

4

7 に答える 7

4

ajaxは非同期であるため、呼び出しが終了する前にアラートが実行されます

于 2013-02-07T17:10:25.523 に答える
2

jQuery.get()非同期呼び出しです。jQuery.get()は、AJAXを使用してサーバー側から値をフェッチします。つまり、javascriptステートメントの実行は、サーバーにリクエストを送信した後も、サーバーからの応答を待たずに続行されます。

AJAXはの略ですAsynchronous JavaScript and XML

サーバーからの応答が返されると、メソッドに登録されているコールバックpostメソッドが呼び出されます。

したがって、サーバーリクエストが返されるまでに、alertステートメントはすでに実行されているはずです。グローバル変数を宣言し、formHtml初期化していないので、その値はundefinedアラートで取得している値です。

于 2013-02-07T17:10:24.850 に答える
1

リーシュが言ったように->Well for one, the get will take a moment to complete.

あなたが使用することができます.ajaxComplete()

$(document).ajaxComplete(function(){
   alert(formHtml);
});
于 2013-02-07T17:13:20.790 に答える
1

alert(formHtml);前に実行されますformHtml = data;

于 2013-02-07T17:10:42.100 に答える
1

これを試して :

var formHtml;

jQuery.get("form2.htm", function (data) {
    formHtml = data;
    alert(formHtml);
});

前に述べたように、jQuery.getは非同期メソッドです。コールバック関数は、後で応答を受信したときに実行されます。

jQuery.get("form2.htm", function (data) {
    formHtml = data;
    alert('response received!');
});
alert('request send!');

「requestsend!」、「responsereceived!」の順に表示されます。

于 2013-02-07T17:14:15.957 に答える
0

form2.htm非同期でロードされます。alert渡したコールバックgetが呼び出される前に実行するためformHtml、まだ値が指定されていません。

于 2013-02-07T17:12:28.923 に答える
0

jQuery.get()は非同期操作であり、匿名はajax呼び出しの終了後に呼び出しますが、ajaxリクエスト中にアラートがデータを表示しているため、未定義が表示されます

于 2013-02-07T17:12:36.157 に答える