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 相关文章推荐
用js重建星际争霸
Dec 22 Javascript
jQuery 学习入门篇附实例代码
Mar 16 Javascript
js 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
jquery操作select常见方法大全【7种情况】
May 28 jQuery
js刷新页面location.reload()用法详解
Dec 09 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 Javascript
JS如何实现基于websocket的多端桥接平台
May 14 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 删除数组元素
2009/01/16 PHP
php模板原理讲解
2013/11/13 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
素质拓展感言
2014/01/29 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015中学学校工作总结
2015/07/20 职场文书
交通事故协议书范本
2016/03/19 职场文书
python绘制箱型图
2021/04/27 Python
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
python数字图像处理实现图像的形变与缩放
2022/06/28 Python