IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Contourner asynchrone jsonp


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Par défaut Contourner asynchrone jsonp
    Bonjour

    j'appele cette fonction qui devrait me renvoyer "true"
    pour le ajax je rentre bien dans le cadre du success
    malheureusement ma variable "valid" reste à false

    petite drolerie, si je met un alert avant le return, le reste de mon code s'execute comme si valid retournait true mais dans le alert c'est bien false qui s'affiche ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function Validat(ip)
    {
    	var valid = false;
    	$.ajax({url : 'http://urlsurunautreserver.php',
    		type : 'get',
    		async : false,
    		jsonpCallback: 'callback',
        	contentType: "application/json",
    		dataType : 'jsonp',
    		data : {
            'format' : 'jsonp',
    		'ip' : ip},
    		success : function(data,text,jqXHR) {
    				if(data == null) {
    					DisplayError(language);
    					return false;
    				}
    				var errorText = null;
    				if(!data.accepted_ip) {
    					errorText = data.reason_ip;
    				}
    				if(errorText != null) {
    					var reg = new RegExp("\\\\n", "g");
    					errorText = errorText.replace(reg,'\n');                
    					alert(errorText);
    					return false;
    				}
    				valid=true;//edit:)
    			},
    		error : function(jqXHR,status,error) {
    				alert(jqXHR+' '+status+' '+error);
    				DisplayError(language);
    			}
    	});
    	return valid;
    }
    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    La fonction retournera toujours "false" en asynchrone et avec cet horrible synchrone (async : false) vous bloquez l'utilisateur.

    Une variable "valid" et dans la méthode "success" : "is_valid = true;"

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Par défaut
    Bonjour,

    je pensais que async : false me permettait d'attendre la fin du ajax pour passer à la suite

    la variable valid et is_valid est une erreur de copier coller

    Que dois je faire ?

    Merci de votre aide

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    async: false ne sert à rien avec un dataType: jsonp.
    En effet, les types json et jsonp passent par la création de balise <script> pour faire l'appel (et d'autant plus pour du cross domaine) il est donc impossible de forcer un fonctionnement synchrone.
    C'est d'ailleurs clairement expliqué dans la doc :
    Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Par défaut
    merci

    peut être une astuce pour contourner ça ?

    Merci

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Bovino
    il est donc impossible de forcer un fonctionnement synchrone.
    Citation Envoyé par nicerico
    peut être une astuce pour contourner ça ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. Lancer exécutable en asynchrone
    Par ZeKiD dans le forum ANT
    Réponses: 4
    Dernier message: 30/03/2004, 16h42
  2. Contourner un obstacle 2D
    Par coco dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 20/11/2003, 08h51
  3. Estimation de Temps d'un requete, lancement asynchrone
    Par maveric dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/10/2003, 23h13
  4. architecture d'un programme client/serveur asynchrone (win)
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 05/09/2003, 23h59
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo