使用ajaxFileUpload插件同步调用ajax,设置了async: false,但是不起作用,求解

tracy1436 2014-02-11 05:12:41
代码如下: 使用ajaxFileUpload插件调用ajax,需要使用同步,设置了async: false,但是不起作用,程序先alert出“wait”,再alert出“haha”,请高手们帮忙看下,小弟第一次发帖求助,感谢!

function checkFile(id){
var flag = false;
var data = {
'operate': "checkPropFile"
}
$.ajaxFileUpload({
url: uploadActionRoot+"f6427.do?"+$.param(data),
secureuri: false,
fileElementId: id,
dataType: 'json',
async: false,
success: function (data, status){
alert("haha");
var retmsg = $.trim(data.msg);
if(''!=retmsg){
showDialog(retmsg, 0);
flag=true;
}
} ,
error: function (data, status, e)
{
alert("error: "+e);
}

});


alert("wait");
return flag;
}
...全文
5416 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_29441763 2015-12-30
  • 打赏
  • 举报
回复
楼主您好,最后您的问题解决了么?
licip 2014-02-12
  • 打赏
  • 举报
回复
外部结束没有关系吧,你把要处理的代码放在: function (data, status){ alert("haha"); var retmsg = $.trim(data.msg); if(''!=retmsg){ showDialog(retmsg, 0); flag=true; } } 中去完成吧。
tracy1436 2014-02-12
  • 打赏
  • 举报
回复
引用 5 楼 showbo 的回复:
同步不了。。只能将你的后续代码都放到success回调里面执行
但是这样的话 js代码执行比ajax快啊,还没到success里面就已经结束js方法了,咋整?
Go 旅城通票 2014-02-12
  • 打赏
  • 举报
回复
同步不了。。只能将你的后续代码都放到success回调里面执行
tracy1436 2014-02-12
  • 打赏
  • 举报
回复
引用 3 楼 MengYouXuanLv 的回复:
回调方法里面执行
可否说的详细点?
allali 2014-02-12
  • 打赏
  • 举报
回复
回调方法里面执行
tracy1436 2014-02-12
  • 打赏
  • 举报
回复
引用 1 楼 showbo 的回复:
那你楼主不了解ajaxFileUpload的实现机制,ajaxFileUpload是用iframe来传文件,不是ajax,设置async当然无效了
那请问怎样才能用ajaxFileUpload实现同步呢?
Go 旅城通票 2014-02-12
  • 打赏
  • 举报
回复
楼主去学点js基础,js怎么执行的都没弄不明白啊,你不是传递了函数句柄了,success会执行,同时执行你传递的回调函数
tracy1436 2014-02-12
  • 打赏
  • 举报
回复
引用 9 楼 showbo 的回复:
设置不了同步,你的方法永远返回false 不是和你说了,需要依据返回值执行的代码全部移动到success回调里面,或者做成一个函数传递进去,在success中调用

function checkFile(id,okfun){
//.....
//...
success:function(){
                    if(''!=retmsg){
                        showDialog(retmsg, 0);
                        okfun()///////////
                    }
}
//......
}
原来是这样的
var rst=checkFile('id');
if(rst){
//........
}
改成
function okfun(){
    //........
}
var rst=checkFile('id',okfun);
但是此时js方法已经执行结束了,里面的ajax还能继续执行么?
Go 旅城通票 2014-02-12
  • 打赏
  • 举报
回复
设置不了同步,你的方法永远返回false 不是和你说了,需要依据返回值执行的代码全部移动到success回调里面,或者做成一个函数传递进去,在success中调用

function checkFile(id,okfun){
//.....
//...
success:function(){
                    if(''!=retmsg){
                        showDialog(retmsg, 0);
                        okfun()///////////
                    }
}
//......
}
原来是这样的
var rst=checkFile('id');
if(rst){
//........
}
改成
function okfun(){
    //........
}
var rst=checkFile('id',okfun);
tracy1436 2014-02-12
  • 打赏
  • 举报
回复
引用 7 楼 licip 的回复:
外部结束没有关系吧,你把要处理的代码放在: function (data, status){ alert("haha"); var retmsg = $.trim(data.msg); if(''!=retmsg){ showDialog(retmsg, 0); flag=true; } } 中去完成吧。
忘了说了 ajax所在的js是需要返回true或者false的 ,js方法开始定义一个flag为false,ajax处理后需要在回调方法里给flag赋值为true的,现在回调方法都还没执行呢,js就返回false了,如何是好?
Go 旅城通票 2014-02-11
  • 打赏
  • 举报
回复
那你楼主不了解ajaxFileUpload的实现机制,ajaxFileUpload是用iframe来传文件,不是ajax,设置async当然无效了

87,909

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧