最近在一个项目里面打算实现如下功能:

当我注册账号的时候当输入账号完毕后输入框失焦时执行一个 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回调函数不能赋正确值或返回正确值的问题的更多相关文章

  1. jquery Ajax 不执行回调函数success的原因

    jquery Ajax 不执行回调函数success的原因: $.ajax({ type: "post", contentType: "application/json& ...

  2. ajax请求成功回调函数没有执行问题

    如下常见的ajax前端请求,请求成功后success:function(result){ 这里的数据没有执行 }: $.ajax({ type:"post", url:" ...

  3. $.post()返回数据正常,但不执行success回调函数

    今天遇到一特郁闷的问题,如题:$.post()返回数据正常,但不执行success回调函数.说它郁闷是因为没毕业之前就遇到过解决了,却没有记录下来,导致卡了一下午. 像这样,post返回数据正常,但却 ...

  4. Ajax不执行回调函数的原因(转)

    今天用ajax的post请求后台,但是始终不执行回调函数,经查得知,ajax不执行回调函数的原因如下: jquery中规定返回的JSON字符串的KEY要用引号括起来,如{“result”: 1}这样才 ...

  5. ajaxSubmit请求返回数据成功,但是不执行success回调函数

    最近项目涉及到附件上传就头痛,一直在用plupload插件在做...ie9偶尔抽风但还是可以的... 然后有个需求,表格每行都有个上传按钮,页面多上传按钮. 一.开始的时候,用plupload做的,多 ...

  6. php变量函数,回调函数

    一,变量可以直接传递函数 <?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) { e ...

  7. C++中类成员函数作为回调函数

    注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...

  8. Go基础系列:函数(2)——回调函数和闭包

    回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 函数可以作为另一个函数的参数(典型用法是回调函数) 函数可以返回另一个函数,即让另一个 ...

  9. C++中 线程函数为静态函数 及 类成员函数作为回调函数

    线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运行,静态函数的地址是不变的,并不在线程堆栈中static只 ...

随机推荐

  1. Go语言标准包之json编码

    标准的就简单通用. package main import ( "encoding/json" "fmt" "log" ) func mai ...

  2. 基于kbengine 0.4.20 解读

    [以下文章转自kbe论坛] MMOG服务端是一种高品质的工程项目,品读开源的kbe是一种乐趣.本文档我带童鞋们一起领略一下.囿于我知识面和经验方面所限,文中所述之处难免有错误存在,还请读童鞋们睁大慧眼 ...

  3. SocketCluster

    官网地址:https://socketcluster.io/ SocketCluster的组成部分,即运行一个SocketCluster服务器,它在服务器生成的进程 1.主进程(Server.js)一 ...

  4. Mac OS X系统下的Android环境变量配置

    在Mac下开发Android,要想在终端利用命令行使用adb/android等命令时,需要配置一下环境变量. 步骤: 1.首先,假设你已经下载了Android SDK,解压后安装了adb.记住sdk文 ...

  5. [jquery] input值发生变化则触发

    $("#a").val("你好").trigger("change"); $("#a").bind("chan ...

  6. vue组件scoped CSS及/deep/深度选择器

    参考链接:https://vue-loader.vuejs.org/zh/guide/scoped-css.html#%E5%AD%90%E7%BB%84%E4%BB%B6%E7%9A%84%E6%A ...

  7. 面向对象编程课程(OOP)第二单元总结

    一.设计策略 第一次作业(傻瓜式电梯): 由于是第一次写多线程作业,许多的知识还处在理论阶段,所以第一次作业写得非常的朴实无华.整个程序总共有四个类,Main类负责通过电梯类实例化一个电梯,然后通过w ...

  8. Pandas分组运算(groupby)修炼

    Pandas分组运算(groupby)修炼 Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚. 今天,我们一起来领略下groupby() ...

  9. JZYZOJ1536 [haoi2014]走出金字塔

    http://172.20.6.3/Problem_Show.asp?id=1536 确实不难,找规律的题,开始想复杂了,分了好多情况.开始为省几个变量加了一大堆max,min,abs代码一下子复杂太 ...

  10. vijos p1777 引水入城(bfs+贪心)

    引水入城   描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个N行M列的矩形,其中每个格子都代表一座城市,每座城市都有一个海拔高度. 为了使 ...