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 相关文章推荐
CSS JavaScript 实现菜单功能 改进版
Dec 09 Javascript
JS 修改URL参数(实现代码)
Jul 08 Javascript
基于javascript 闭包基础分享
Jul 10 Javascript
JavaScript替换当前页面的方法
Apr 03 Javascript
使用plupload自定义参数实现多文件上传
Jul 19 Javascript
Javascript 动态改变imput type属性
Nov 01 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
Mar 05 Javascript
JS实现的类似微信聊天效果示例
Jan 29 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 Javascript
vue 解除鼠标的监听事件的方法
Nov 13 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 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
西德产收音机
2021/03/01 无线电
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
解决Python中回文数和质数的问题
2019/11/24 Python
python简单实现9宫格图片实例
2020/09/03 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
元旦晚会主持词
2014/03/24 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
处罚决定书范文
2015/06/24 职场文书
初二数学教学反思
2016/02/17 职场文书