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 相关文章推荐
jQuery select的操作实现代码
May 06 Javascript
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
Nginx上传文件全部缓存解决方案
Aug 17 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 Javascript
jQuery通过deferred对象管理ajax异步
May 20 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
JS常用加密编码与算法实例总结
Dec 22 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
Jul 10 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 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
Syphon 使用方法
2021/03/03 冲泡冲煮
php中通过curl smtp发送邮件
2012/06/05 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
jQuery增加与删除table列的方法
2016/03/01 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
python遍历数组的方法小结
2015/04/30 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
经典大学生求职信范文
2014/01/06 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
党员组织关系介绍信
2014/02/13 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
作风建设演讲稿
2014/05/23 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
企业承诺书格式范文
2015/04/28 职场文书
第一节英语课开场白
2015/06/01 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js