【笔记】关于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只 ...
随机推荐
- 通过百度地图API获取经纬度以及两点间距离
package com.baidumap; import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu ...
- JMX monitor weblogic 总结
https://blog.csdn.net/joy_91/article/details/42774839
- Cloudstack平台实战
https://blog.csdn.net/zhangliu463884153/article/details/80606020
- Java学习笔记(八)——java多线程
[前面的话] 实际项目在用spring框架结合dubbo框架做一个系统,虽然也负责了一块内容,但是自己的能力还是不足,所以还需要好好学习一下基础知识,然后做一些笔记.希望做完了这个项目可以写一些dub ...
- web前端零基础入门学习!前端真不难!
现在互联网发展迅速,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发是最最简单的 ...
- Qt发布可能遇到的问题
1.首先要搞清楚动态链接库还是静态链接 本文只涉及动态链接库,就是编译出来的exe文件加上Qt 的必要dll文件. 一般跟别人一样的操作,直接双击 XX.exe,提示缺少什么dll,就去Qt的安装目录 ...
- ubuntu安装过程记录
[DNS修改] 新下载的ubuntu 17.04 安装后DNS是指向谷歌DNS的,谷歌被屏蔽啦,所以无法解析域名.解决办法: ctrl+alt+t 启动终端 : sudo su 输入管理員密碼,或去 ...
- ps aux 状态介绍
ps aux 输出 参数 含义 详解 运行 ps aux 的到如下信息: ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START T ...
- linux下LD_PRELOAD的用处
linux下LD_PRELOAD的用处 在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前 ...
- poj 2940
Wine Trading in Gergovia Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3187 Accepte ...