ExtJS:下一个方法甚至在 Ext.Ajax.request 完成之前执行
ExtJS: Next method executes even before Ext.Ajax.request completes
下面是我的 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 成功。
下面是我的 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 成功。