11499 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je dois contrôler un email dans un formulaire par le biais du js.

Voici les contrôles que je dois effectuer :
- champ vide
- structure correcte
- DNS correct


Pour cela, j'utilise les "rules".

Voici mon code js
$("#f_profil").validate({
    rules: {
        email: {                        
            required: true,  // premier contrôle : champ vide
            email: true, // deuxième contrôle : structure correcte
            remote: {  // troisième contrôle : DNS correct
                url: SERV+"/profile/ajax/validate/",
                type: "POST",
                data: {
                    email: function()  {
                        return $("#email").val();
                    }
                }
            }
        },
    },
    messages: {
        email: {
            required: REQUIRED,
            email: "email invalide",
            remote: $.validator.format("{0}")
        }
    }
});


Voici mon code php
public function ajaxAction () {
    $return = null;
    if($this->getRequest()->getParams('validate', null)) {
        if($this->getRequest()->getPost('email', null)) :
            $return = $this->validator('email', null, 'email');
        endif;
        $this->view->return = ($return) ? "email invalide" : '"true"';
    }
}


Le script fonctionne correctement partout sauf pour safari sur mac. (safari pc et iphone, pas de problème).

Sur safari version mac, le premier et le deuxième contrôle fonctionnent. Par contre le troisième ne fonctionne pas.

J'ai lu que les requêtes ajax étaient par défaut asynchrone et que des problèmes pouvaient en découler.
src : http://www.eric-pidoux.com/actu/safa...avascript-ajax

J'ai rajouté dans le "remote" la ligne
async: false,

juste après la ligne
type: "POST",


mais il n'y a pas de changement.

Peut-être elle est mal placée ?
J'ai essayé aussi d'utiliser addMethod mais comme je ne suis pas très calé en ajax, cela ne fonctionne pas.

Si vous voyez mon erreur ou si vous avez une alternative, je suis preneur.

Merci
Bonjour et merci pour ton intérêt.

Malheureusement, le console.log n'a rien donné de particulier.

Par contre, le problème a été résolu Smiley smile .

Lorsque j'ai ajouté le "async: false," dans le "remote", rien n'a changé comme je l'ai dit. J'ai également ajouté le code "cache:false," qui n'était pas présent et miracle, le problème n'est plus.

Voici le code qui fonctionne :
$("#f_profil").validate({
    rules: {
        email: {                        
            required: true,  // premier contrôle : champ vide
            email: true, // deuxième contrôle : structure correcte
            remote: {  // troisième contrôle : DNS correct
                url: SERV+"/profile/ajax/validate/",
                type: "POST",
                async: false,
                cache:false,
                data: {
                    email: function()  {
                        return $("#email").val();
                    }
                }
            }
        },
    },
    messages: {
        email: {
            required: REQUIRED,
            email: "email invalide",
            remote: $.validator.format("{0}")
        }
    }
});
Je crois que j'ai oublié de cocher la case "Message résolu". C'est fait Smiley cligne
Modifié par jrigal (03 Oct 2013 - 11:37)