1

我有 3 个功能:

function selected_feature_intervencoes(event){

    store_intervencoes.removeAll();
    for(var i=0; i<ruas_intervencoes.selectedFeatures.length; i++){

        trecho_selecionado = parseInt(ruas_intervencoes.selectedFeatures[i].attributes.k_n_rua);
        toponimo_selecionado = ruas_intervencoes.selectedFeatures[i].attributes.toponimia;
        valor_trecho += parseFloat(ruas_intervencoes.selectedFeatures[i].attributes.orcamento_total);
        ajaxFunction();
        }                   
    };

function ajaxFunction(){
    Ext.Ajax.request({
        url: 'php/grid.php',
        method: 'GET',
        success: sucesso(i),
        failure: fracasso,
        params: {'k_n_rua': trecho_selecionado[i]}
        });
    }


function sucesso (result, request) {

    jsonData = Ext.util.JSON.decode(result.responseText);            
    if (!jsonData.rows) {
        jsonData = Ext.util.JSON.decode('{"rows" :[{"fk_n_rua":"' + trecho_selecionado[] +  '","nome_intervencao":"","prioridade":"","orcamento":"","toponimia":"' + toponimo_selecionado + '"}]}');
}
 store_intervencoes.loadData(jsonData, true);       
 document.getElementById('total_intervencoes').value = valor_trecho.toFixed(2) + ' €';

}

forinselected_feature_intervencoes(event)函数按此顺序执行其他两个函数:

ajaxFunction();
ajaxFunction();
sucesso ();
sucesso ();

但我想按以下顺序执行它们:

ajaxFunction();
sucesso ();
ajaxFunction();
sucesso ();

有人可以告诉我我是怎么做到的吗?

4

2 回答 2

0

您可以使用像Q这样的承诺库。Q 允许你将异步调用链接在一起,语法看起来像这样:

Q.fcall(ajaxFunction)
    .then(sucesso)
    .then(ajaxFunction)
    .then(sucesso)
    .done();
于 2013-08-23T12:04:19.297 回答
0

直接调用服务器而不是使用 AJAX。这样,它将等到收到响应后再进行下一步。

于 2013-08-23T12:10:19.287 回答