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 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
JavaScript 学习笔记(十二) dom
Jan 21 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
js格式化金额可选是否带千分位以及保留精度
Jan 28 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
JS实现列表的响应式排版(推荐)
Sep 01 Javascript
浅谈angularjs $http提交数据探索
Jan 20 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 Javascript
详解JSON Web Token 入门教程
Jul 30 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
Feb 21 Javascript
vue如何实现关闭对话框后刷新列表
Apr 08 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 strtr() 函数使用说明
2008/11/21 PHP
深入php list()函数的详解
2013/06/05 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
Vue3为什么这么快
2020/09/23 Javascript
python实现TF-IDF算法解析
2018/01/02 Python
python os模块简单应用示例
2019/05/23 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
大学毕业感言一句话
2014/02/06 职场文书
商业融资计划书
2014/04/29 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
医院护士工作检讨书
2014/10/26 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技
基于Python实现股票收益率分析
2022/04/02 Python