遇到一个bug,是有关ajax异步操作的,我就一直想都没有找到好的解决办法
出现的问题就是 客户想要做操作:选定一条数据->点击解锁/锁定–>刷新并自动选定第一条数据
想要的效果是 选定一条数据->点击解锁/锁定–>刷新并选定原来的那条数据
//原来的锁单方法
//锁单
$("#btn_lockSingle").bind("click", function() {
var selections = $('#tg').datagrid('getSelections');
if(selections[0].isLock == "1"){
messager("提示:","该条订单已被锁定!");
return false;
}
$.ajax({
url:"${ctx}/bmscst/deblocking.do",
type:"POST",
async:false,
data:{
"guid":selections[0].guid,
"lockUsrId":selections[0].lockUsrId
},
success:function(data){//ajax返回的数据
if(messageTipReText(data)){
$("#tg").datagrid("load");
}
}
});
//原来的解锁方法
//解锁
$("#btn_deblocking").bind("click", function() {
var selections = $('#tg').datagrid('getSelections');
if(selections[0].isLock == "0" || selections[0].isLock ==undefined){
messager("提示:","已经是解锁状态!");
return false;
}
$.ajax({
url:"${ctx}/bmscst/deblocking.do",
type:"POST",
async:false,
data:{
"guid":selections[0].guid,
"lockUsrId":selections[0].lockUsrId
},
success:function(data){//ajax返回的数据
if(messageTipReText(data)){
$("#tg").datagrid("load");
}
}
});
});
//tg里面的操作
onLoadSuccess: function(data) {
rows = data.rows;
if (rows[0] != undefined) {
$("#tg").datagrid('selectRow', 0);
ordId = rows[0].guid;
}
$("#tg2").datagrid({
url:'${ctx}/bmscst/page.do?ordId='+ordId
});
}
}
当ajax里面有需要异步成功后执行的代码 在
success:function(data){//ajax返回的数据
if(messageTipReText(data)){
$("#tg").datagrid("load").datagrid('selectRow',index);
i = 1;
alert("1");
}
}
里面写,但是当里面又存在需要先后顺序的时候呢?那么我该怎么做呢
然后就一直纠结在ajax那里无法自拔。。。找过$.when().done().then(),但是发现还是不行
最后的解决方法是,能不在ajax里面做的,就不在里面做,总之就是没找到能在ajax里面按我想要的顺序执行方法
最后是在tg的onLoadSuccess 里面做逻辑判断
//修改后的锁单方法
var indexId = 0;
$("#btn_lockSingle").bind("click", function() {
var selections = $('#tg').datagrid('getSelections');
indexId = $('#tg').datagrid('getRowIndex', $('#tg').datagrid('getSelected'));
if(selections[0].isLock == "1"){
messager("提示:","该条订单已被锁定!");
return false;
}
$.ajax({
url:"${ctx}/bmscst/lockSingle.do",
type:"POST",
async:false,
data:{"guid":selections[0].guid},
success:function(data){//ajax返回的数据
if(messageTipReText(data)){
$("#tg").datagrid("load");
}
}
});
});
//修改后的解锁方法
$("#btn_deblocking").bind("click", function() {
var selections = $('#tg').datagrid('getSelections');
indexId = $('#tg').datagrid('getRowIndex', $('#tg').datagrid('getSelected'));
if(selections[0].isLock == "0" || selections[0].isLock ==undefined){
messager("提示:","已经是解锁状态!");
return false;
}
$.ajax({
url:"${ctx}/bmscst/deblocking.do",
type:"POST",
async:false,
data:{
"guid":selections[0].guid,
"lockUsrId":selections[0].lockUsrId
},
success:function(data){//ajax返回的数据
if(messageTipReText(data)){
$("#tg").datagrid("load");
}
}
});
});
//tg里面修改后的操作
onLoadSuccess: function(data) {
rows = data.rows;
if (rows[0] != undefined) {
if(indexId != null && indexId != undefined){
$("#tg").datagrid('selectRow', indexId);
ordId = rows[indexId].guid;
}else{
$("#tg").datagrid('selectRow', 0);
ordId = rows[0].guid;
}
$("#tg2").datagrid({
url:'${ctx}/bmscst/page.do?ordId='+ordId
});
}
}
结论就是不要在一颗树上吊死,小白水平,说得不清晰的不要打我哈,有错误的地方欢迎斧正!