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 相关文章推荐
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
在jQuery ajax中按钮button和submit的区别分析
Oct 07 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 Javascript
JS+DIV实现的卷帘效果示例
Mar 22 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
Sep 20 Javascript
vue cli使用绝对路径引用图片问题的解决
Dec 06 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
May 03 Javascript
微信公众号H5支付接口调用方法
Jan 10 Javascript
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 Javascript
react组件基本用法示例小结
Apr 27 Javascript
玩转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
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
深入理解Django的自定义过滤器
2017/10/17 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
中学门卫岗位职责
2013/12/26 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
留学推荐信怎么写
2015/03/26 职场文书
初中政治教学反思
2016/02/23 职场文书
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript