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
内部调用acknowledge
r
?然后使用
r
内部请求回调或使用承诺接口方法设置逻辑。搜索有关如何使用ajax的示例Ok。但是我很难理解这个概念。谢谢你的链接。我现在就去探勘。这对我来说是一个新的见解。我从来没有想过用客观的方法去做,我总是求助于开关!谢谢你,伙计。这让我更接近backbone.js!