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 相关文章推荐
细说javascript函数从函数的构成开始
Aug 29 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
Js+Jq获取URL参数的集中方法示例代码
May 20 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
ES6概念 Symbol.keyFor()方法
Dec 25 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
详解微信第三方小程序代开发
Jun 23 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
浅谈Node.js 子进程与应用场景
Jan 24 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 jQuery
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
Home Coffee Roasting
2021/03/03 咖啡文化
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
AngularJS实现表单验证功能
2017/01/09 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
JSF界面控制层技术
2013/06/17 面试题
小学教师的个人自我鉴定
2013/10/26 职场文书
个人授权委托书
2014/09/15 职场文书
公司规章制度范本
2015/08/03 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫