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 prototype,executing,context,closure
Dec 24 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
JQuery动画和停止动画实例代码
Mar 01 Javascript
JS 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
jQuery添加和删除指定标签的方法
Dec 16 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
May 27 Javascript
Vue 实现分页与输入框关键字筛选功能
Jan 02 Javascript
vuex的使用步骤
Jan 06 Vue.js
vue使用echarts实现折线图
Mar 21 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP数据库开发知多少
2006/10/09 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
读书小明星事迹材料
2014/05/03 职场文书
入党综合考察材料
2014/06/02 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
法律意见书范文
2015/05/20 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技