我经常使用jQuery帖子请求。我知道当你在响应中工作时,变量有自己的范围。有没有一种很好的方法可以在响应中设置变量,但是在帖子之外可以使用这些变量?与JS中的其他功能一样。
以下是我正在做的事情的示例:
$.post('URL', { }, function(data) {
var cData = $.parseJSON(data);
$.each(cData, function(k, v) {
var cID = v.id;
});
所以我做的是我无法在帖子请求之外访问cID。有没有办法使这项工作?
任何帮助都会很棒。 感谢
更新:
以下是我刚刚测试过的一个示例:
var savedCount;
$.post('/app/actions/countsAction.php', { call: "getCountFullByID", countID: countID}, function(data) {
savedCount = 1;
alert(savedCount);
});
alert(savedCount);
我运行时收到2个警报。当$ .post中的警报被触发时,第一个是1,而第二个是未定义的。
答案 0 :(得分:7)
只需在$.post
来电之外声明您的变量:
var cID;
$.post('URL', function(data) {
var cData = $.parseJSON(data);
$.each(cData, function(k, v) {
cID = v.id;
});
});
...不知道你正在尝试用它做什么,因为你正在循环一个集合并不断(重新)设置单个变量的值。如果需要跟踪所有变量,请考虑将值保存在(可能)数组中。
修改强>
如果您需要进行同步(“阻止”)$.post
来电,则可以。从the docs获取asynch
函数参数:
默认情况下,所有请求都是异步发送的(默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。
干杯
答案 1 :(得分:1)
您可以存储整个数据对象,而不是循环并将变量重置为其他值。然后,您可以访问外部的所有数据。您还应该在$.post
之外定义变量,以便您可以访问它
var cID;
$.post('URL', { }, function(data) {
cID = $.parseJSON(data);
});