jquery ajax return没有返回值的解决方法


Posted in Javascript onOctober 20, 2011

大家先看一段简单的jquery ajax 返回值的js

function getReturnAjax{ 
$.ajax({ 
type:"POST", 
url:"ajax/userexist.aspx", 
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", 
url:"ajax/userexist.aspx", 
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, 
url:"ajax/userexist.aspx", 
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", 
url:"ajax/userexist.aspx", 
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); 
}

按需选择自己需要的方案吧。一般大网站都采用第2种传入函数的方式,来处理成功和失败情况下的页面提示。
//添加async:false.即修改为同步 
//等ajax给bol赋值完毕后,才执行下面的js部分。而异步的话,还没有来得及赋值,就已经return了。 
function vcodeYes() { 
var bol = false; 
$.ajax( 
{ 
type: "GET", 
url: "../Ajax/ValidationCode.ashx", 
data: { txtVcode: $('#<%=txtVcode.ClientID%>').val() }, 
async: false, 
success: function (data) { 
if (data == "0") { 
$.dialog({ icon: 'warning', follow: document.getElementById('txtVcode'), content: '验证码错误!' }).time(1); 
changeCaptchaImage('imgVerify2', 'txtVcode'); 
} 
else { 
bol = true; 
} 
} 
}); 
return bol; 
} 
//验证没通过是 返回false 否则执行下面函数 
$('.getVodes').click(function () { 
if (vcodeYes()) { 
。。。执行下面。。。 
} 
});
Javascript 相关文章推荐
获取HTML DOM节点元素的方法的总结
Aug 21 Javascript
Js+php实现异步拖拽上传文件
Jun 23 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
JS简单实现数组去重的方法示例
Mar 27 Javascript
JavaScript实现前端分页控件
Apr 19 Javascript
如何在 JavaScript 中更好地利用数组
Sep 27 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
如何使用VuePress搭建一个类型element ui文档
Feb 14 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 Javascript
Vue2.x通用编辑组件的封装及应用详解
May 28 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 Javascript
IE与FireFox中的childNodes区别
Oct 20 #Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
Oct 19 #Javascript
基于jquery的$.ajax async使用
Oct 19 #Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
Oct 19 #Javascript
模拟select的代码
Oct 19 #Javascript
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 #Javascript
Notify - 基于jquery的消息通知插件
Oct 18 #Javascript
You might like
php中的数组操作函数整理
2008/08/18 PHP
PHP SQLite类
2009/05/07 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
深入php数据采集的详解
2013/06/02 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python实现的knn算法示例
2018/06/14 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
详解python itertools功能
2020/02/07 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
2013的个人自我评价
2013/12/26 职场文书
护士求职信范文
2014/05/24 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
关于长城的导游词
2015/01/30 职场文书
主婚人致辞精选
2015/07/28 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python