2

我经常使用 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,而第二个是未定义的。

4

2 回答 2

7

只需在$.post调用之外声明您的变量:

var cID;
$.post('URL', function(data) {
    var cData = $.parseJSON(data);
    $.each(cData, function(k, v) {
        cID = v.id;  
    });
});

...不确定您要尝试做什么,因为您正在循环一个集合并不断(重新)设置单个变量的值。如果您需要跟踪所有变量,请考虑将值保存在(也许)一个数组中。

编辑 如果您需要进行同步(“阻塞”)$.post调用,您可以。从函数参数的文档中:asynch

默认情况下,所有请求都是异步发送的(即默认设置为true)。如果您需要同步请求,请将此选项设置为 false。跨域请求和 dataType: "jsonp" 请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。

干杯

于 2012-12-07T19:59:48.740 回答
1

You can store your whole data object instead of looping through and resetting the variable to a different value. Then you can access all your data outside. You should also define your variable outside of $.post so you have access to it

var cID;
$.post('URL', { }, function(data) {    
    cID = $.parseJSON(data);             
});
于 2012-12-07T20:03:40.397 回答