【笔记】关于jq $.ajax 函数 success回调函数不能赋正确值或返回正确值的问题
最近在一个项目里面打算实现如下功能:
当我注册账号的时候当输入账号完毕后输入框失焦时执行一个 ajax 请求,验证账号是否被注册,并未这个输入框的 isCorrect属性赋值,如果没有被注册 isCorrect属性值为“true”,否则为 “false”。代码如下:
ajax: function(obj){
/*
{
elem: //验证的元素,
hintsContent: //提示框元素,
errorColor: //错误时显示的颜色,
url: //后台处理页地址,
reqData: //发送过去的内容(以对象的形式保存)
correctBool: //返回数据的正确值值名
errorBool: //返回数据的错误值名
result: //返回的数据键名
}
*/
var that = this;
var bool;
var id = obj["elem"].id;
console.log(id);
obj["elem"].isCorrect = false;
var hintsContain = this.findHintsContain(obj["elem"],obj["hintsContent"]);
//整理为json 字符串
var formateData = JSON.stringify(obj["reqData"]); //保存后台返回键的名
var resultCode = obj["result"] $.ajax({
url: obj["url"],
type: 'GET',
async: false,
dataType: 'json',
data: formateData,
success: function(data){
/*
返回的数据格式
{"result":"true/false"}
*/
//如果返回结果为false 则显示错误信息 if (data[resultCode] == obj["errorBool"]) {
hintsContain.innerText = that.hintsData[id]["ajaxError"];
hintsContain.style.color = obj["errorColor"];
hintsContain.style.visibility = 'visible';
obj["elem"].isCorrect = false;
bool = false;
}else{
obj["elem"].isCorrect = true;
bool = true;
}
}
}); return bool; }
上面的代码是自己封装的一个表单验证类中的一个方法,大致意思就是当元素需要进行验证时发送一个ajax 请求验证,参数是以一个 json 对象传进去的
方法的一开始就首先为元素的 isCorrect 属性赋初值 “false”(开头提及到的属性)
但是有意思的是在回调函数中却不能给这个值赋正确的值
success: function(data){
/*
返回的数据格式
{"result":"true/false"}
*/
//如果返回结果为false 则显示错误信息 if (data[resultCode] == obj["errorBool"]) {
hintsContain.innerText = that.hintsData[id]["ajaxError"];
hintsContain.style.color = obj["errorColor"];
hintsContain.style.visibility = 'visible';
obj["elem"].isCorrect = false;
bool = false;
}else{
obj["elem"].isCorrect = true;
bool = true;
}
}
上面这行代码就是通过请求成功之后返回的值,可见我通过后台发送过来的信息判断输入框是否正确,当时最初的时候元素的 isCorrect 属性一直是返回 “false”无论后台给出什么数据。
---------------重点---------------
于是问了度娘一把,才知道ajax 请求在异步发送和接收的时候因为有时候连服务器都未返回数据就执行了请求成功的函数所以未能返回正确的值,导致无法给指定的变量赋正确的值。
于是解决方法就是把异步请求改为同步请求,这个问题得以解决:
$.ajax({
url: obj["url"],
type: 'GET',
async: false,
dataType: 'json',
data: formateData,
jq 的ajax 方法属性 async 改为 false即可
【笔记】关于jq $.ajax 函数 success回调函数不能赋正确值或返回正确值的问题的更多相关文章
- jquery Ajax 不执行回调函数success的原因
jquery Ajax 不执行回调函数success的原因: $.ajax({ type: "post", contentType: "application/json& ...
- ajax请求成功回调函数没有执行问题
如下常见的ajax前端请求,请求成功后success:function(result){ 这里的数据没有执行 }: $.ajax({ type:"post", url:" ...
- $.post()返回数据正常,但不执行success回调函数
今天遇到一特郁闷的问题,如题:$.post()返回数据正常,但不执行success回调函数.说它郁闷是因为没毕业之前就遇到过解决了,却没有记录下来,导致卡了一下午. 像这样,post返回数据正常,但却 ...
- Ajax不执行回调函数的原因(转)
今天用ajax的post请求后台,但是始终不执行回调函数,经查得知,ajax不执行回调函数的原因如下: jquery中规定返回的JSON字符串的KEY要用引号括起来,如{“result”: 1}这样才 ...
- ajaxSubmit请求返回数据成功,但是不执行success回调函数
最近项目涉及到附件上传就头痛,一直在用plupload插件在做...ie9偶尔抽风但还是可以的... 然后有个需求,表格每行都有个上传按钮,页面多上传按钮. 一.开始的时候,用plupload做的,多 ...
- php变量函数,回调函数
一,变量可以直接传递函数 <?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) { e ...
- C++中类成员函数作为回调函数
注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...
- Go基础系列:函数(2)——回调函数和闭包
回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 函数可以作为另一个函数的参数(典型用法是回调函数) 函数可以返回另一个函数,即让另一个 ...
- C++中 线程函数为静态函数 及 类成员函数作为回调函数
线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运行,静态函数的地址是不变的,并不在线程堆栈中static只 ...
随机推荐
- [水煮 ASP.NET Web API2 方法论](12-2)管理 OData 路由
问题 如何控制 OData 路由 解决方案 为了注册路由,可以使用 HttpConfigurationExtension 类中 MapODataServiceRoute 的扩展方法.对于单一路由这样 ...
- img加载不出来,给个默认图片。
忽然发现,jq里也有坑,很多东西莫名其妙的被废弃了……所以,只能用原生js来做了: $('img').each(function() { if (!this.complete || typeof th ...
- LoadRunner:关联HTTP请求
LoadRunner:关联HTTP请求 本例通过一个使用HTTP/HTML协议发送.获取服务器数据的vuser脚本,分析LoadRunner如何进行HTTP关联. 下面这个例子包括两个事务:上传数据到 ...
- PHP的命名空间namespace
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- DaemonSet
What is a DaemonSet? DaemonSet能够让所有(或者一些特定)的Node节点运行同一个pod.当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节 ...
- .net中 Timer定时器
作者:feiying008 在开发一套视觉系统时,发现系统内存一直不断增加,直至系统内存爆满.一开始还以为是程序内存泄露,是图像操作算法写的有问题,但是,发现如果电机轴如果 不运行的状态下,每隔一秒进 ...
- 派(Dispatch)
单派与多派 (Single Dispatch and Multi Dispatch) "检查一个数据项的类型,并据此去调用某个适当的过程称为基于类型的分派". 上面是来自<计 ...
- RecyclerView混合布局
本来想把公司的UI图放上来,考虑到版权等未知因素,就拿网上的图来说了: 类似的这种布局,有的一行只有一张图片,有的一行有两个元素,有个一行有三个元素..就是混合的布局方式 参考文献: https:// ...
- 【HDU 3622】Bomb Game
http://acm.hdu.edu.cn/showproblem.php?pid=3622 二分答案转化成2-sat问题. 上午测试时总想二分后把它转化成最大点独立集但是不会写最大点独立集暴力又秘制 ...
- Codeforces 555 B. Case of Fugitive
\(>Codeforces \space 555 B. Case of Fugitive<\) 题目大意 : 有 \(n\) 个岛屿有序排列在一条线上,第 \(i\) 个岛屿的左端点为 \ ...