尝试做一项应该是一项简单的任务而无法找到解决方案。我正在尝试设置一个名为$ .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...
}
});
有什么想法吗?
答案 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。无论哪种方式都必须处理,如上所述,但我没有在代码中看到,在响应从服务器返回后。