【笔记】关于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即可

时间: 2024-07-30 03:23:50

【笔记】关于jq $.ajax 函数 success回调函数不能赋正确值或返回正确值的问题的相关文章

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

jquery Ajax 不执行回调函数success的原因: $.ajax({ type: "post", contentType: "application/json", url: basePath+"pages/Tongji/disposeAgree.action?cepingitem="+cepingitem+"&userrelation="+userrelation, //data: {fenshu:8},da

ajax中调用回调函数

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="javascript:void(0);" id="send">test</a> </bo

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

今天用ajax的post请求后台,但是始终不执行回调函数,经查得知,ajax不执行回调函数的原因如下: jquery中规定返回的JSON字符串的KEY要用引号括起来,如{"result": 1}这样才可以. 所以是数据返回的格式问题,如把dataType设置为json,那么就需要按照json的格式将数据返回,如设置为text,则无需是json的数据格式. 原文地址:https://www.cnblogs.com/tianyublog/p/9251442.html

c语言(函数指针,回调函数)

//  main.m //  1-28随堂笔记 //讲师: 小辉 //笔者: 王学文 //  Created by lanouhn on 15/1/28. //  Copyright (c) 2015年 lanouhn. All rights reserved. // 函数指针, 回调函数 #import <Foundation/Foundation.h> struct student { char name[20]; float score; int age; }; typedef stru

Java/Android中的函数调用&amp;回调函数&amp;自定义回调函数

在做Android自定义控件时遇到要自定义回调函数的问题,想想自己还暂时没有那么精深的技术,赶紧返过头回来再重新研究Java中回调函数的问题.然而不幸的是,网上太多杂乱的帖子和博客都是转来转去,而且都是那一篇"C中的回调函数.....指针.....java....",一点看不出来是自己的思路,估计都是哪哪哪抄来的!(呵呵,要么就是吐槽对了,要么就是我水平太烂读不懂还妄加评论)还有一些很不错的文章,我会在最后参考中加上链接,大家可以看看. 那么来开始我们的正题--什么是回调函数? 我们一

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

注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过. 普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从

钩子函数和回调函数的区别

一般认为,钩子函数就是回调函数的一种,其实还是有差异的,差异地方就是:触发的时机不同. 先说钩子函数: 钩子(Hook)概念源于Windows的消息处理机制,通过设置钩子,应用程序对所有消息事件进行拦截,然后执行钩子函数. let btn = document.getElementById("btn"); btn.onclick = () => { console.log("i'm a hook"); } 上面的例子,在按钮点击时候立即执行钩子函数.而看下面的

普通函数与回调函数的区别

普通函数与回调函数的区别:对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行.从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行” 对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行.这样,调用程序执和被调用函数同时在执行.当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束.这个过程称为回调(Callback)

ajax success回调函数里return undefined的原因?

最近在做毕业项目,注册表单里用$.ajax提交数据给服务器端php检查账号是否已经注册过,success时函数的返回值为什么总是undefined? var reg_mail = $.trim($("#reg_mail").val()).toLowerCase(); //注册邮箱获取 var reg = /^[a-z0-9]+[@][a-z0-9]+[.][a-z0-9]+$/; //设置邮箱匹配正则 if(reg.test(reg_mail)){ //如果邮箱符合规范就提交服务器进行