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 相关文章推荐
向fckeditor编辑器插入指定代码的方法
May 25 Javascript
JavaScript DOM 学习第二章 编辑文本
Feb 19 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
Oct 15 Javascript
js使用栈来实现10进制转8进制与取除数及余数
Jun 11 Javascript
一个获取第n个元素节点的js函数
Sep 02 Javascript
通过location.replace禁止浏览器后退防止重复提交
Sep 04 Javascript
Three.js基础部分学习
Jan 08 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
小程序红包雨的实现示例
Feb 19 Javascript
js实现多张图片每隔一秒切换一张图片
Jul 29 Javascript
electron 安装,调试,打包的具体使用
Nov 06 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
MySQL相关说明
2007/01/15 PHP
php里array_work用法实例分析
2015/07/13 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
微信JS接口汇总及使用详解
2015/01/09 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
如何利用Python写个坦克大战
2020/11/18 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
高中生的自我评价
2014/03/04 职场文书
小学社会实践活动总结
2014/07/03 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
2014年部门工作总结
2014/11/12 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
储备店长岗位职责
2015/04/14 职场文书
python glom模块的使用简介
2021/04/13 Python
JS ES6异步解决方案
2021/04/29 Javascript
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android