extjs ajax神奇的提交问题
保存按钮事件:下面的success是在for循环里面的,但是success里的msg等for循环完成后才有,为何?yhDataStore上有6条数据,对6条数据的某个字段...
保存按钮事件:
下面的success是在for循环里面的,但是success里的msg等for循环完成后才有,为何?
yhDataStore上有6条数据,对6条数据的某个字段(非数据库id)全部进行修改,for里面的alert(i)或alert(.id)被注释后保存时只会随机的保存成功1-2条数据,有时候Myeclipse的Console里Hibernate会报错说HibernateException: identifier of an instance of ** was altered from ** to **,(**是某个id),如果把alert加入运行,则会全部保存成功,但每个循环都alert一下。怎么回事?难道Hibernate保存数据需要时间间隔来反应?更新频率大了就混淆?
handler: function(){
//alert('保存');
for(var i=0;i<yhDataStore.getCount();i++){
var record=yhDataStore.getAt(i);
//alert(i);
if(record.dirty){
if(record.data.yhid==''){
Ext.MessageBox.show({
title:'提示',
msg: 'ID为空,触发异常!',
buttons: Ext.MessageBox.OK
});
return ;
};
//alert(record.data.yhid);
Ext.Ajax.request({
url:'saveEditedAccounts.action',
method:'post',
params:{
'account.userid':record.data.yhid,
'account.username':record.data.yhname,
'account.userpwd':record.data.yhpwd,
'account.usercata':record.data.yhcata
},
success:function(form, action){
var result=Ext.util.JSON.decode(form.responseText)
//alert(result.success);
if(result.success){Ext.Msg.alert("提示","保存成功!");}
else{Ext.Msg.alert("错误","保存不成功!");}
},
failure:function(form, action){
Ext.Msg.alert("错误","数据传输过程出现错误!");
}
});
};
};
//yhGrid.getStore().reload();
}
Extjs版本: 3.2 展开
下面的success是在for循环里面的,但是success里的msg等for循环完成后才有,为何?
yhDataStore上有6条数据,对6条数据的某个字段(非数据库id)全部进行修改,for里面的alert(i)或alert(.id)被注释后保存时只会随机的保存成功1-2条数据,有时候Myeclipse的Console里Hibernate会报错说HibernateException: identifier of an instance of ** was altered from ** to **,(**是某个id),如果把alert加入运行,则会全部保存成功,但每个循环都alert一下。怎么回事?难道Hibernate保存数据需要时间间隔来反应?更新频率大了就混淆?
handler: function(){
//alert('保存');
for(var i=0;i<yhDataStore.getCount();i++){
var record=yhDataStore.getAt(i);
//alert(i);
if(record.dirty){
if(record.data.yhid==''){
Ext.MessageBox.show({
title:'提示',
msg: 'ID为空,触发异常!',
buttons: Ext.MessageBox.OK
});
return ;
};
//alert(record.data.yhid);
Ext.Ajax.request({
url:'saveEditedAccounts.action',
method:'post',
params:{
'account.userid':record.data.yhid,
'account.username':record.data.yhname,
'account.userpwd':record.data.yhpwd,
'account.usercata':record.data.yhcata
},
success:function(form, action){
var result=Ext.util.JSON.decode(form.responseText)
//alert(result.success);
if(result.success){Ext.Msg.alert("提示","保存成功!");}
else{Ext.Msg.alert("错误","保存不成功!");}
},
failure:function(form, action){
Ext.Msg.alert("错误","数据传输过程出现错误!");
}
});
};
};
//yhGrid.getStore().reload();
}
Extjs版本: 3.2 展开
3个回答
展开全部
这个设计本来就是用来插入单条数据的,你如果要做批量插入,前台后台都要改。详细的说起来就复杂了。
还有,我没明白你说的什么叫success是在for里面的?你是想说你整个是在
for(){
post{
callback{}
}
}
么?
如果这样那就是大大的问题了~~我不知道你想提交什么,不过从设计上来说,如果你想提交一个grid的数据,那么一般都是编辑完一行就直接提交过去了~。
http请求本身就需要时间来响应,数据库的insert也是需要时间的,而且用hibernate不断地单条insert效率非常慢~~所以你这个问题就是请求过去了 然后这边insert的事务还没完,所以第一次的http请求也就还没完,然后你第二次请求又来了~~这样就出现了需要线程同步的地方了,否则肯定会出问题的。
所以就算按照你现有的代码改,也是应该一次post请求之后,返回了success再进行第二次请求。
反正总的说来就是你这个需要整个改设计。
还有,我没明白你说的什么叫success是在for里面的?你是想说你整个是在
for(){
post{
callback{}
}
}
么?
如果这样那就是大大的问题了~~我不知道你想提交什么,不过从设计上来说,如果你想提交一个grid的数据,那么一般都是编辑完一行就直接提交过去了~。
http请求本身就需要时间来响应,数据库的insert也是需要时间的,而且用hibernate不断地单条insert效率非常慢~~所以你这个问题就是请求过去了 然后这边insert的事务还没完,所以第一次的http请求也就还没完,然后你第二次请求又来了~~这样就出现了需要线程同步的地方了,否则肯定会出问题的。
所以就算按照你现有的代码改,也是应该一次post请求之后,返回了success再进行第二次请求。
反正总的说来就是你这个需要整个改设计。
展开全部
你这是extjs什么版本的,如果是3.X的版本,我确定extjs是没有同步的ajax(其它版本没用过),虽然它有是否同步的可选属性,但是是没有实现的。出现你这样的情况可能是异步的ajax引起的,网上有extjs 同步的示例
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是因为ajax默认是是异步执行的,你改一下执行步骤就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询