jQuery迭代$ .get()是否安全?

时间:2011-08-31 13:59:46

标签: jquery thread-safety

我遇到了绑定下拉菜单的问题。我认为问题是我$.get()中的回调。执行循环是否不安全? E.G。

//on document ready
var stateOneOrTwo = "stateOne";
for(var i = 0; i < 2; i++){
   if(i === 1)
       stateOneOrTwo = "stateTwo";

   $.get(url,{},function(data) {
    var dropdown = stateOneOrTwo;
    $(dropdown).append(/*options*/);
   , 'json')};
}

<小时/> 这看起来似乎不安全。我把DRY原则抛到了窗外。当我复制粘贴代码并只更改涉及的变量名称时,我没有任何问题。我将提出一个具体答案的问题。

2 个答案:

答案 0 :(得分:1)

我完全不确定$.get是否会在完成之前调用一个新的失败,但是,更安全(和更正确)的方法是使用递归函数来确保请求完成在发送下一个之前。

答案 1 :(得分:1)

问题是您在XHR返回之前正在更改stateOneOrTwo,因此两个回调都将在stateOneOrTwo等于"stateTwo"的情况下运行。如果你只是打电话给两次,你真的不需要循环。

$.get(url,{},function(data) {
    var dropdown = "stateOne";
    $(dropdown).append(/*options*/);
}, 'json');

$.get(url,{},function(data) {
    var dropdown = "stateTwo";
    $(dropdown).append(/*options*/);
}, 'json');