Extjs4 ExtJS:Next方法甚至在Ext.Ajax.request完成之前执行

Extjs4 ExtJS:Next方法甚至在Ext.Ajax.request完成之前执行,extjs4,Extjs4,下面是我的Extjs代码中定义的一个函数 updateJob : function(button,grid, record) { var activeAccordianName = _myAppGlobal.getController('RFBAccordiansController').getActiveAccordianName(); if(activeAccordianName == 'Lookup') { var win = button.up('wind

下面是我的Extjs代码中定义的一个函数

updateJob : function(button,grid, record) {
    var activeAccordianName = _myAppGlobal.getController('RFBAccordiansController').getActiveAccordianName();
    if(activeAccordianName == 'Lookup') {
        var win = button.up('window'),
        form = win.down('form'),
        record = form.getRecord(),
        values = form.getValues();

        var oldRecord = new Object();
        oldRecord.environment=record.get('environment');
        .........
        ..........
        win.close();
        this.submitLookupJobUpdateForm(oldRecord,values);
        record.set(values);
        }

},
在调用“this.submitLookupJobUpdateForm(oldRecord,values);”之前,一切正常。这个方法有一个Ajax请求,它执行得很好,但是需要一些时间,因为我正在从数据库中获取一些数据。但是下一条语句“record.set(values);”甚至在Ajax请求完成之前就被执行了。下面是submitLookupJobUpdateForm方法代码

submitLookupJobUpdateForm: function(oldRecord,values){
    Ext.Ajax.request({
        url : './LookupUpdateController/LookupUpdate/UpdateJob.do',
        method : 'POST',
        params :
        {
            record : Ext.JSON.encode(oldRecord),
            newValues : values              
        },
        success : function(response)
        {
            var jobInfoJson=response.responseText;
            if (jobInfoJson != "" & jobInfoJson != "[]")
            {
                alert("Updating row");
            } else
            {
                Ext.MessageBox.alert("Failed","Update Failed");
            }
        }
    });
},

任何人都可以建议我应该怎么做,以便在Ajax请求完成后调用“record.set(values);”。提前感谢。

Ajax请求是异步执行的,因此在请求完成之前不会暂停代码,这就是为什么在submitLookupJobUpdateForm()调用之后会立即调用record.set()

我建议您将record.set()调用移动到一个单独的函数中,该函数在成功处理程序中被调用

这种事情,

submitLookupJobUpdateForm: function(oldRecord,values){
    Ext.Ajax.request({
        url : './LookupUpdateController/LookupUpdate/UpdateJob.do',
        method : 'POST',
        params :
        {
            record : Ext.JSON.encode(oldRecord),
            newValues : values              
        },
        success : function(response)
        {
            var jobInfoJson=response.responseText;
            if (jobInfoJson != "" & jobInfoJson != "[]")
            {
                //alert("Updating row");
                this.processRowUpdate();
            } else
            {
                Ext.MessageBox.alert("Failed","Update Failed");
            }
        },
        scope:this
    });
},

processRowUpdate: function() {
    record.set(...);
}
通过这种方式,您可以确保您的record.set()等待Ajax成功