javascript - 可变范围
javascript - variable scope
这是一个愚蠢的问题,但我正在尝试在 ajax 范围之外使用 var form_data
中的内容。我该怎么做呢? form_data 似乎只存在于 ajax 函数内部而不是外部,即使在 ajax 范围之外声明了变量。我认为变量冒泡直到它找到它在未定义 var
时声明的位置。
为了澄清我的问题,我如何在成功函数之外使用来自服务器的结果?我不想限制自己在 ajax 成功回调中做所有事情。
$(function () {
var form_data;
$.ajax({
type: 'GET',
url: 'print_form.php',
data: {
//data sent to server
},
success: function (response) {
form_data = JSON.parse(response);
console.log(form_data); //object is printed out as expected
},
error: function () {
alert('AJAX failed for print_form');
}
});
console.log(form_data); //undefined
});
因为 AJAX 代表异步 Javascript 和 Xml,所以您的代码不会因为正在执行的 ajax 操作而被阻塞,因为它是异步的。在您的情况下,当您通过 ajax 获取数据时,您的 javascript 不会停止继续执行并等待请求成功。而不是那样,当您获取数据时,其余代码仍会执行。这就是为什么在您通过 ajax 请求从服务器获取之前,form_data
已经在 ajax 请求范围之外打印。
我们来测试一下:
尝试用任何值初始化 form_data
。你会发现现在你不会在打印值的 ajax 之外得到 undefined 。相反,您将获得初始化变量的值。
An alternative construct to the success callback option, the .done()
method replaces the deprecated jqXHR.success() method. Refer to
deferred.done() for implementation details.
source: http://api.jquery.com/jquery.ajax/
按照文档中的说明构建您的代码:
我成功地使用了隔离 Ajax 调用的设置。
function sendAjax(xhrdata) {
return $.ajax({
type: 'GET',
url: 'print_form.php',
data: xhrdata
}).promise();
}
sendAjax(data).done(function(response) {
form_data = JSON.parse(response);
console.log(form_data);
}
这是一个愚蠢的问题,但我正在尝试在 ajax 范围之外使用 var form_data
中的内容。我该怎么做呢? form_data 似乎只存在于 ajax 函数内部而不是外部,即使在 ajax 范围之外声明了变量。我认为变量冒泡直到它找到它在未定义 var
时声明的位置。
为了澄清我的问题,我如何在成功函数之外使用来自服务器的结果?我不想限制自己在 ajax 成功回调中做所有事情。
$(function () {
var form_data;
$.ajax({
type: 'GET',
url: 'print_form.php',
data: {
//data sent to server
},
success: function (response) {
form_data = JSON.parse(response);
console.log(form_data); //object is printed out as expected
},
error: function () {
alert('AJAX failed for print_form');
}
});
console.log(form_data); //undefined
});
因为 AJAX 代表异步 Javascript 和 Xml,所以您的代码不会因为正在执行的 ajax 操作而被阻塞,因为它是异步的。在您的情况下,当您通过 ajax 获取数据时,您的 javascript 不会停止继续执行并等待请求成功。而不是那样,当您获取数据时,其余代码仍会执行。这就是为什么在您通过 ajax 请求从服务器获取之前,form_data
已经在 ajax 请求范围之外打印。
我们来测试一下:
尝试用任何值初始化 form_data
。你会发现现在你不会在打印值的 ajax 之外得到 undefined 。相反,您将获得初始化变量的值。
An alternative construct to the success callback option, the .done() method replaces the deprecated jqXHR.success() method. Refer to deferred.done() for implementation details. source: http://api.jquery.com/jquery.ajax/
按照文档中的说明构建您的代码:
我成功地使用了隔离 Ajax 调用的设置。
function sendAjax(xhrdata) {
return $.ajax({
type: 'GET',
url: 'print_form.php',
data: xhrdata
}).promise();
}
sendAjax(data).done(function(response) {
form_data = JSON.parse(response);
console.log(form_data);
}