0

我正在创建一个 jquery 插件。在那使用一些全局变量 $.rmtableparams.recordsCount: 0就是其中之一。

我从一个函数中为此分配了一些值inside an ajax call

 callAjax = function (surl, pselector, pi, rec) {
 $.ajax({
 ..
   success: function (data) {
           $.rmtableparams.recordsCount =10;
    }
  });
  }  

但是,当我尝试访问$.rmtableparams.recordsCount其他一些函数时,它返回 0。但奇怪的是,如果i alert anything在此之前it will returns 10正确。

即:如果我的脚本是

alert("hi");
alert($.rmtableparams.recordsCount);

第二个警报将显示 10

但如果只有alert($.rmtableparams.recordsCount);它返回 0

我想知道这一点。如果有人知道原因,请帮助我。

4

2 回答 2

3

分配$.rmtableparams.recordsCount =10;在请求的success回调中。$.ajax因此,在完成 ajax 调用并收到响应之前,不会分配值。这发生得相当快,所以当您第一次alert等待关闭时,会收到 ajax 响应,并处理分配。然后,第二个警报显示新值。

如果您忽略第一个警报,则呼叫仍在处理中并且$.rmtableparams.recordsCount值尚未更改。
就这么简单:AJAX 代表异步 JavaScript 和 XML。异步是关键,但经常被忽视......

于 2013-07-16T06:45:12.243 回答
0

你不能只是继续设置$.rmtableparams.recordsCount,因为$.rmtableparams不存在。

您首先需要设置$.rmtableparams

$.rmtableparams = {};

然后继续向对象添加数据:

$.rmtableparams.recordsCount = 10;

确保成功回调被触发。在回调中添加alertorconsole.log来进行检查。

于 2013-07-16T06:37:49.737 回答