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+json实现数据列表分页示例代码
Nov 15 Javascript
jquery跟js初始化加载的多种方法及区别介绍
Apr 02 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
Feb 28 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
javascript阻止事件冒泡和浏览器的默认行为
Jan 21 Javascript
Bootstrap BootstrapDialog使用详解
Feb 17 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
May 11 Javascript
express+mockjs实现模拟后台数据发送功能
Jan 07 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
JavaScript相等运算符的九条规则示例详解
Oct 20 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
vue使用过滤器格式化日期
Jan 20 Vue.js
玩转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
php基础知识:类与对象(5) static
2006/12/13 PHP
PHP 模拟$_PUT实现代码
2010/03/15 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
Joomla语言翻译类Jtext用法分析
2016/05/05 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
2020/08/06 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
Python实现的简单dns查询功能示例
2017/05/24 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
酒后驾驶检讨书
2014/01/27 职场文书
职工运动会邀请函
2014/02/02 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
政风行风评议心得体会
2014/10/21 职场文书
2014年居委会工作总结
2014/12/09 职场文书