使用闭包解决jQuery中AJAX的外部变量问题


在AJAX中,我们经常都要使用外部变量,经常会多次使用,如下代码

var title = 'blog';
$.post(url, {}, function(data){
    alert(title);//output single's blog, 我们期望的是输出 blog
})
title = "single's blog";
$.post(url, {}, function(data){
    alert(title);//output single's blog
})

又如代码:

for(var i=0;i<3;i++)
{
    $.get('/?'+i, {}, function(data){
        alert(i); //我们期待的是按顺序alert(1) alert(2) alert(3),但是实际上三次都是alert
    })
}

这均是由于AJAX异步导致的问题,可以轻松使用闭包解决问题

var title = 'blog';
(function(title){
    $.post(url, {}, function(data){
        alert(title);//output single's blog, 我们期望的是输出 blog
    })
}(title))
title = "single's blog";
(function(title){
    $.post(url, {}, function(data){
        alert(title);//output single's blog
    })
}(title))
for(var i=0;i<3;i++)
{
   ((function(i){
        $.get('/?'+i, {}, function(data){
            alert(i); // alert(1) alert(2) alert(3)
        })
    }(i))
}

PS:
(function(){
//code
}()),自执行函数(或匿名函数),详见谷歌或度娘。


发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注