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

alert(formHtml);将在之前执行formHtml = data;

于 2013-02-07T17:10:42.100 回答
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

试试这个 :

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!');

您将看到“请求发送!”,然后是“收到响应!”。

于 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 回答