我希望Ajax在信息有效时获取信息。所以如果我这样做
$(document).ready(function () {
var url = '/my/url/';
var ses = true;
var i = 0;
while (ses) {
i++;
var temp;
$.get(url + "?get=" + i, function (data) {
if (data != '') {
temp = data;
sortArticles(data);
}
});
if(temp == '') ses = false;
}
});
如果我在没有while
(将0而不是get
var)的情况下执行此操作,我会获得所需的信息,但如果我这样说,我会进入无限循环并且分页。顺便说一句,我测试了if(data != '')
语句按预期工作。
我不知道为什么temp
不会更改ses
变量的状态。我尝试在$.get(..)
else ses = false;
但它也没有做到这一点。
感谢阅读!
答案 0 :(得分:2)
jQuery ajax(作为大多数ajax实现),$.get()
是简写,是异步默认的。回调函数仅在请求完成后执行。虽然没有让JS引擎无法控制,但回调没有机会完成它的工作 - 即使请求已完成,也会无限期地继续下去。
为了不断发送请求,请尝试这样:
function requestMore(i) {
$.get('/my/url/?get=' + i, function (data) {
if (data != '') {
sortArticles(data);
requestMore(i + 1);
}
});
}
(document).ready(function () {
requestMore(1);
});
答案 1 :(得分:0)
您编写代码temp
的方式永远不会是''
。
问题是temp
不是字符串。它未定义。
而不是:
if(temp == '') ses = false;
写:
if(typeof(temp) == 'undefined') ses = false;
答案 2 :(得分:0)
$(document).ready(function () {
var url = '/my/url/';
var ses = true;
var i = 0;
while (ses) {
i++;
var temp='';
$.get(url + "?get=" + i, function (data) {
if (data != '') {
temp = data;
sortArticles(data);
}
});
if(temp == '') ses = false;
}
});
这将起作用。将temp初始化为空白字符串,如图所示:)