变量范围
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 之外得到未定义。相反,您将获得初始化变量时使用的值。
成功回调选项的替代构造,.done() 方法替换了已弃用的 jqXHR.success() 方法。指 deferred.done() 了解实现细节。 来源: 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);
}
相关文章:
- ngDialog-弹出窗口未更新范围变量
- AngularJS范围变量Unwatch
- 将外部控制器的范围变量设置为角度
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- 具有范围变量的控制器不工作
- 范围变量返回长度错误
- 将 NodeJS 模块范围变量作为对象访问
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 递归承诺调用 - 内存范围变量问题
- AngularJS:从指令设置范围变量
- Angularjs:访问范围变量数组并计算平均值
- 范围变量更新,但不更新视图
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何在编辑范围变量时(暂时)避免摘要循环
- 防止Angular范围变量通过引用自动绑定到服务私有成员
- 使用 AngularJS 从指令设置范围变量
- 集合回调忽略范围变量
- 使用forEach修改角度范围变量
- 因果报应测试中未定义的预期范围变量