jquery ajax 同步异步的执行 return值不能取得的解决方案


Posted in Javascript onJanuary 08, 2012

大家先看一段简单的jquery ajax 返回值的js

代码

function getReturnAjax{ 
$.ajax({ 
type:"POST", data:"username="+vusername.value, 
success:function(msg){ 
if(msg=="ok"){ 
showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false) 
return true; else showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false); 
vusername.className="bigwrong"; 
return false; 
} }

但是我们调用这个getReturnAjax()发现始终取得的都是false,那就是说return true,return false根本没有起作用,在火狐下用firebug调试也证明,代码根本不会执行到return 部分。

我们试想在函数里先定义一个变量,然后在ajax里赋值,最后在函数的末尾返回这个变量,会不会有效果呢?我们把代码修改如下:

代码

function getAjaxReturn(){ 
var bol=false; 
$.ajax({ 
type:"POST", data:"username="+vusername.value, 
success:function(msg){ 
if(msg=="ok"){ 
showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false) 
// return true; 
bol=true; else showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false); 
vusername.className="bigwrong"; 
//return false; } 
return bol;

结果仍然不起作用。最后解决方案有2,如下

1、添加async:false.即修改为同步了,什么意思?(按同事解释就是,这是等这个ajax有了返回值后才会执行下面的js。一语道破天机,怪不得以前很多ajax调用里面的赋值都不起作用)。这样等ajax给bol赋值完毕后,才执行下面的js部分。而刚刚异步的话,还没有来得及赋值,就已经return了。

代码

function getAjaxReturn() { 
var bol=false; 
$.ajax({ 
type:"POST", 
async:false, data:"username="+vusername.value, 
success:function(msg){ 
if(msg=="ok"){ 
showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false) 
// return true; 
bol=true; else showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false); 
vusername.className="bigwrong"; 
//return false; } return bol; 
}

2、 通过传入一个函数解决这个问题。
function getAjaxReturn(success_function,fail_function){ 
var bol=false; 
$.ajax({ 
type:"POST", data:"username="+vusername.value, 
success:function(msg){ 
if(msg=="ok"){ 
showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>该用户名可以使用</font></b>",false) 
success_function(msg); 
} 
else showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>该用户已被注册</font></b>",false); 
vusername.className="bigwrong"; 
fail_function(msg); 
//return false; } 
}); 
function success_function(info) //do what you want do 
alert(info); funciont fail_function(info) //do what you want do 
alert(info); 
}
Javascript 相关文章推荐
关于javascript 回调函数中变量作用域的讨论
Sep 11 Javascript
javascript object array方法使用详解
Dec 03 Javascript
单击某一段文字改写文本颜色
Jun 06 Javascript
js实现按一下删除键删除整个单词附demo
Sep 05 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
express+mockjs实现模拟后台数据发送功能
Jan 07 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
jquery实现选项卡切换代码实例
May 14 jQuery
玩转jQuery按钮 请告诉我你最喜欢哪些?
Jan 08 #Javascript
分享几个超级震憾的图片特效
Jan 08 #Javascript
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 #Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
Jan 08 #Javascript
人人网javascript面试题 可以提前实现下
Jan 05 #Javascript
javascript是怎么继承的介绍
Jan 05 #Javascript
js 链式延迟执行DOME
Jan 04 #Javascript
You might like
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
mysql时区问题
2008/03/26 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
详解python eval函数的妙用
2017/11/16 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
python读取LMDB中图像的方法
2018/07/02 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
销售代理协议书
2014/09/30 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书