当前位置 : 主页 > 网页制作 > JQuery >

jquery – AJAX data.length到var无法正常工作

来源:互联网 收集:自由互联 发布时间:2021-06-15
当我这样做: $.ajax({ url: purl, dataType: 'json', success: function(data){ alert(data.length); }}); 我得到一个长度计数警报. 但是当我这样做的时候…… $.ajax({ url: purl, dataType: 'json', success: function(data)
当我这样做:

$.ajax({
    url: purl,
    dataType: 'json',
    success: function(data){
        alert(data.length);
    }
});

我得到一个长度计数警报.

但是当我这样做的时候……

$.ajax({
    url: purl,
    dataType: 'json',
    success: function(data){
        items = data.length;
    }
});

alert(items);

将长度设置为全局变量,它不想玩得很好.思考?

AJAX部分不会立即发生;在AJAX回调有时间设置项目的新值之前发生警报.

从jQuery 1.5开始,$.ajax返回一个实现Promises接口的对象.因此,您可以在执行代码之前随时确认promise已解决时调用.done方法:

​var promise = $.ajax({/*...*/});

promise.done(function(data){
    // Only works if the promise is resolved
});

例如,假设我们直接创建了一个延迟对象:

var promise = $.Deferred();

然后我们告诉它要等到五秒后才解决:

setTimeout(function(){ 
    promise.resolve("Foo");
}, 5000);

但是我们绑定了一个处理程序来响应文档对象的点击:

$(document).on("click", function () {
    promise.done(function(data){
        alert("Data is " + data);
    });
});

请注意,我们将警报放在匿名函数中,并将其传递给promise.done,以便在解析promise之后执行.

这会构建一个队列,直到该promise被解决.如果我在前五秒内单击四次,则不会发生任何事情,但一旦该承诺结算,我将看到一个接一个出现四个警告框.

现在承诺得到解决,任何进一步的点击(在5秒等待之后)将立即采取行动.

演示:http://jsfiddle.net/w7swE/1/

网友评论