Javascript在获得响应之前分配变量
我不确定什么是正确的问题,但我将尝试在我当前的工作代码中解释:Javascript在获得响应之前分配变量,javascript,jquery,ajax,Javascript,Jquery,Ajax,我不确定什么是正确的问题,但我将尝试在我当前的工作代码中解释: var container, loader switch(section){ case 'A': container = $('#list .container') loader = $('#surveylist') var r = postToServer(data, loader) if(r.cstatus === true){ co
var container, loader
switch(section){
case 'A':
container = $('#list .container')
loader = $('#surveylist')
var r = postToServer(data, loader)
if(r.cstatus === true){
container.html(r.content)
}
break
case 'B':
container = $('#control .container')
loader = container
var r = postToServer(data, loader)
if(r.cstatus === true){
container.html(r.content.panelB)
}
break
case 'C':
container = $('#content .container')
loader = container
var r = postToServer(data, loader)
if(r.cstatus === true){
$('#surveyElements').sortable();
$('textarea').autosize();
container.html(r.content.panelC)
}
break
}
正如你所看到的,我重复了同样的代码,并希望简化这个方法,但不确定在谷歌中搜索哪个词是正确的。基本上,我试图实现的是这种结构:
var container, loader, test
switch(section){
case 'A':,
container = $('#list .container')
loader = $('#surveylist')
test = container.html(r.content)
break
case 'B':
container = $('#control .container')
loader = container
test = container.html(r.content.panelB)
break
case 'C':
container = $('#content .container')
loader = container
test = container.html(r.content.panelC)
break
}
var r = postToServer(data, loader)
if(r.cstatus === true){
// what is the right method to put 'test' here?
}
或者你们对重构这段代码有什么建议 这只是一个草稿,仍然可以优化,但可能会有所帮助
var sections = {
A: {
container: $('#list .container'),
loader: $('#surveylist'),
getTest: (function(container, r){ return container.html(r.content) })
},
B: {
container: $('#control .container'),
loader: $('#control .container'),
getTest: (function(container, r){ return container.html(r.content.panelB) })
},
C: {
container: $('#content .container'),
loader: $('#content .container'),
getTest: (function(container, r){ return container.html(r.content.panelC) })
},
};
var sectionEntry = sections[section];
r = postToServer(data, sectionEntry.loader);
if(r.cstatus === true){
test = sectionEntry.getTest(sectionEntry.container, r);
}
“把‘测试’放在这里的正确方法是什么?”放在这里,你的意思是什么???无论如何,检查代码时,
test
等于container
。我真的不明白您在寻找什么。变量test
分配在每个案例中。但是正如您所看到的,变量r
仅在开关之后声明,因此案例中的每个测试都是无效的。也许我应该把test
变成一个函数而不是变量?如果是这样,我如何在test
内部调用acknowledger
?然后使用r
内部请求回调或使用承诺接口方法设置逻辑。搜索有关如何使用ajax的示例Ok。但是我很难理解这个概念。谢谢你的链接。我现在就去探勘。这对我来说是一个新的见解。我从来没有想过用客观的方法去做,我总是求助于开关!谢谢你,伙计。这让我更接近backbone.js!