Javascript while循环中的Ajax调用

Javascript while循环中的Ajax调用,javascript,jquery,ajax,while-loop,get,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 + "?ge

我希望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;
            }
        });
如果我在没有
的情况下这样做,而
(用0代替
get
var),我会得到我需要的信息,但是如果我这样做,我会进入一个无限循环,页面会断开。顺便说一下,我进行了测试,
if(data!='')
语句按预期工作

我不知道为什么
temp
不更改
ses
变量的状态。我试图在
$中放入一条else语句。get(..)

但这也没用


谢谢你的阅读

您编写代码的方式永远不会是
'
。 问题是
temp
不是字符串。没有定义

而不是:

if(temp == '') ses = false;
写:

if(typeof(temp) == 'undefined') ses = false;
jQuery ajax(与大多数ajax实现一样,
$.get()
是jQuery ajax的缩写),默认为异步操作系统。回调函数仅在请求完成后执行。while将无限期地继续,因为如果不将控制权交给JS引擎,回调就没有机会完成它的工作——即使请求已经完成

要连续发送请求,请尝试以下操作:

function requestMore(i) {
  $.get('/my/url/?get=' + i, function (data) {
     if (data != '') {
       sortArticles(data);
       requestMore(i + 1);
     }
  });
}

(document).ready(function () {
  requestMore(1);
});

这将起作用。将temp初始化为一个空白字符串,如图所示:)

在while循环中调用AJAX不是一个好主意。在开始循环之前,是否无法确定需要发出多少请求?或者,更好的做法是,更改服务器实现以在一个请求中返回所有必需的数据。@RoryMcCrossan我使用的是ASP.NET MVC,所以问题是,如果我返回所有结果(它们是JSON),我只会得到一个结果作为
System.Web.AjaxRequest
,或者类似的结果,作为一个普通字符串,不是JSON字符串的实际数组。这一个的问题是,它只返回第一个结果,而不是其他结果。当然,当您设置while(ses)时,ses变为false。递归永远不会想到它。但话说回来,直到我读了你的答案,我才知道这是真的。非常感谢你!工作起来很有魅力!
function requestMore(i) {
  $.get('/my/url/?get=' + i, function (data) {
     if (data != '') {
       sortArticles(data);
       requestMore(i + 1);
     }
  });
}

(document).ready(function () {
  requestMore(1);
});
$(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;
            }
        });