在while循环中调用Ajax

时间:2015-08-10 08:51:13

标签: javascript jquery ajax while-loop get

我希望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语句
else ses = false;

但它也没有做到这一点。

感谢阅读!

3 个答案:

答案 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初始化为空白字符串,如图所示:)