2011-08-31 36 views
1

我有一个问题绑定下拉列表。我认为问题在于我的$.get()中的回调。执行获取循环是否不安全?例如。

//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原理扔出窗外。当我复制粘贴代码并更改所涉及的变量名称时,我没有任何问题。我会留下一个具体答案的问题。

回答

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'); 
+0

难道这不是同一个问题吗?如果'stateOneOrTwo'两个get请求都改变了,为什么'i'保持不变? –

+0

是的,我意识到提交后。 – Dennis

+0

这就是我最终做的。正如Rikudo指出的那样,可能有更好的方法来处理我正在做的事情。但是,现在这个工作。 –

1

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

+0

+1谢谢,我不熟悉递归函数。当我完成基本布局时,我将不得不将这视为重构。尽管如此,我宁愿为速度创建并行请求。 –