在$ .get请求之外设置变量jQuery

时间:2011-11-03 22:34:24

标签: jquery

尝试做一项应该是一项简单的任务而无法找到解决方案。我正在尝试设置一个名为$ .get请求之外的变量,但它似乎确实在设置。

这是我的代码:

$(document).ready(function() {
            var totalPages
            var currentPage = 1;
            //this $.get returns a number
            $.get('getTotalPages.php', function(data) {
                totalPages = data;
            });
            //just an example of applying the result to something else
            if (currentPage < totalPages) {
               ... do something...
            }
        });

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

$.get()语句是异步的。这意味着它不会立即完成,但您正在尝试立即使用totalPages返回值。实际上,在调用成功处理程序之前,您无法使用它返回的数据。在您的示例中,您启动$.get()命令(刚刚启动它),然后您立即使用totalPages,但由于totalPages尚未设置$.get(),因此尚未设置totalPages已完成,因此尚未调用设置$.get()的成功处理程序。

任何使用get()答案的工作都必须在成功处理程序本身(或它调用的函数)中完成,因为只有这样才能知道结果是否可用。

将代码更改为此内容以确保其正常工作(假设$(document).ready(function() { var totalPages; //this $.get returns a number $.get('getTotalPages.php', function(data) { totalPages = data; //just an example of applying the result to something else if (currentPage < totalPages) { ... do something... } }); // code executed here will execute before the $.get() command has completed }); 实际正在运行:

{{1}}

答案 1 :(得分:1)

我认为你正在寻找这个:

$ .get()是异步的,但它只是完整的$ .ajax()函数的简写,你可以将它设置为同步并轻松检索responseText属性。

$(document).ready(function() {
  var totalPages;

  totalPages = $.ajax({
    url: 'getTotalPages.php',
    async: false
  }).responseText;
});

请注意,同步请求强制脚本在响应时等待,因此在请求处于活动状态时将禁用其他操作。

答案 2 :(得分:0)

当浏览器接收到ajax请求时,必须完成此操作。 $ .get方法根据成功函数

告诉您
$.get(
{
   'url' : 'someUrl.html',
   'success' : function(data)
   {
       totalPages = data;
       if( totalPages == 1 ) //do stuff
       else            // do other stuff
   }
});

或者只是在外面创建函数并写入'success':functionName。无论哪种方式都必须处理,如上所述,但我没有在代码中看到,在响应从服务器返回后。