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显示用户停留时间的简单实例
Aug 05 Javascript
jquery判断元素的子元素是否存在的示例代码
Feb 04 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
JavaScript实现Flash炫光波动特效
May 14 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 Javascript
学习javascript文件加载优化
Feb 19 Javascript
深入浅析ES6 Class 中的 super 关键字
Oct 20 Javascript
图片加载完成再执行事件的实例
Nov 16 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
jquery实现上传图片功能
Jun 29 jQuery
Javascript中window.name属性详解
Nov 19 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
PHP开发入门教程之面向对象
2006/12/05 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
基于python 处理中文路径的终极解决方法
2018/04/12 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python进程池Pool应用实例分析
2019/11/27 Python
Python sep参数使用方法详解
2020/02/12 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
毕业生护理专业个人求职信范文
2014/01/04 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
南湾猴岛导游词
2015/02/09 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫