在while循环内进行Ajax调用

I want Ajax to get information while the information is valid. So if I do

$(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;
            }
        });

If I do this without while (putting 0 instead of get var), I get the information I need, but if I put it like this, I enter an infinite loop and the page breaks. By the way, I tested and the if(data != '') statement works as intended.

I don't know why temp doesn't change the state of the ses variable. I tried putting an else statement inside $.get(..)

else ses = false;

but it doesn't do the trick neither.

Thanks for reading!

The way you wrote your code temp will never be ''. The problem is temp is not a string. It's undefined.

Instead of:

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

write:

if(typeof(temp) == 'undefined') ses = false;

jQuery ajax (as most ajax implementations), which $.get() is a shorthand for, is asynchronouos be default. The callback function is only executed once the request is complete. The while continues indefinitely since without yielding control out to the JS engine the callback doesn't get a chance to do it's work - even if the request(s) are done.

In order to continuously send requests, try like this:

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;
            }
        });

This will work.Initialize temp as a blank string as shown :)