javascript - Pourquoi renvoyer false dans js ne peut pas empêcher l'exécution vers le bas
欧阳克
欧阳克 2017-06-12 09:21:55
0
5
3941
 //再次验证手机号码 格式是否正确
            var reg = /^1[3|5|4|8|7|][0-9]\d{8}$/;
            var r = phone.match(reg);
            if (r == null) {
                layer.open({
                    content: '手机号码格式不正确'
                    ,skin: 'msg'
                    ,time: 3 //2秒后自动关闭
                });
                return false;   //第一个return false是有效的
            }

            //再次验证手机号码是否已经存在
            $.post("__MODULE__/Login/ajaxCheckPhoneIsExist",{phone:phone},function(data,status){


                if(data=="手机号码已被注册"){

                    layer.open({
                        content: '该手机号码已经存在'
                        ,skin: 'msg'
                        ,time: 3 //2秒后自动关闭
                    });

                    return false;   //第2个return false无效
                }

            });
            
            
            alert("11111");

//Le premier retour faux est valide
//Le deuxième retour faux est invalide
Quelle est la raison

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

répondre à tous(5)
世界只因有你

Le premier return false de la question est appelé de manière synchrone, donc l'effet peut être vu ;

La méthode

$.post est exécutée de manière asynchrone, donc lorsque $.post方法是异步执行的,因此在$.post方法的回调函数里面return false的时候,其实是生效了的,但是在执行这句代码的时候,$.post外面的代码早就执行完成了,所以看不到效果而已。另外,在回调函数里面加这句代码并没有什么意义,因为即使是return,也是退出当前执行的函数,即$.post的回调函数,并不能阻止$.post est à l'intérieur de la fonction de rappel de la méthode $.post, elle prend réellement effet, mais lors de l'exécution de ce code Quand , le code en dehors de $.post a déjà été exécuté, donc l'effet n'est pas visible. De plus, ajouter ce code à la fonction de rappel n'a pas de sens, car même return quitte la fonction en cours d'exécution, c'est-à-dire la fonction de rappel de $.post, et L'exécution de code en dehors de $.post ne peut pas être empêchée.

S'il y a du code qui doit être placé $.post请求成功之后执行的,那就把代码放到$.post方法的回调函数里面去吧。例如题主如果本意想让alert('1111')在请求成功后通过条件判断执行,那可以alert('11111')dans la fonction de rappel de la méthode $.post ;

Permettez-moi d'expliquer ici le synchrone et l'asynchrone par rapport au sujet. Par exemple, le sujet écrit du code et a soif, alors il va faire bouillir de l'eau pour la boire. Dans ce processus, le sujet équivaut à un fil. L'écriture de code est ce que le sujet est en train d'exécuter. Lorsqu'il a soif, il va chercher de l'eau et la fera bouillir. Ne vous inquiétez pas, le sujet continuera. pour écrire du code. Il lui suffit d'attendre que l'eau soit cuite, il suffit de la sortir et de la boire soi-même. Le code du sujet est le même. js est exécuté de haut en bas. Lorsque l'exécution atteint $.post就发送一个请求,请求的过程中外部的js还是继续执行(并没有等待$.post请求返回结果),等到ajax请求返回了,再回调之前定义的回调函数。这里除了$.post, il est exécuté de manière asynchrone et le reste du code est exécuté de manière synchrone.

De plus, j'ai trouvé que l'expression régulière de la question peut être optimisée. Je pense personnellement qu'elle peut s'écrire sous la forme /^1[34578]d{9}$/g

.
漂亮男人

Return renvoie la fonction actuelle. Votre premier retour est la fonction de rappel d'un événement de clic, et le deuxième retour est la fonction de rappel de la requête ajax. Naturellement, cela n'empêchera pas le rappel de la fonction externe

.
学习ing

La fonction dans post est une fonction asynchrone et ne sera appelée qu'une fois la requête réussie. Avant que la requête ne revienne avec succès, le code continuera à être exécuté. La déclaration return false n'est donc pas valide. La solution est de mettre return false en dehors de la fonction asynchrone, pas dans la fonction asynchrone de $.post().

某草草

$.post 是异步执行的,需要使用 $.ajax 并设置 async: false

巴扎黑

Placez-le au même niveau que alert(1111)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal