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 :

JQuery/JSONP/PHP fontionne sur Firefox, mais pas sur Chrome et Opera


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut JQuery/JSONP/PHP fontionne sur Firefox, mais pas sur Chrome et Opera
    Bonjour à tous,

    Je suis en actuellement sur un projet utilisant PHP et JQuery et je dois utiliser dans ce projet des requêtes cross-domain, donc j'utilise JSONP.

    Mes requêtes AJAX fonctionnent toutes sous Firefox, mais pas sous Chrome et Opera.

    J'ai une première fonction qui va exécuter la requête :

    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
     
    function update()
    {
        $.ajax({
            url : url,
            type : "GET",
            dataType: "jsonp",
            crossDomain : true,
            jsonpCallback : "updateCallback",
            async : false, 
            data : {'session_id' : sessionID,'user' : userName },
            error : function (xhr, status, error) {
                alert("Erreur de chargement du fichier '"+url+"' : "+xhr.responseText+" ("+status+" - "+error+")");
            },
            success: function(){
                alert("Success !");
           }
        });
    }
    Le code de la fonction de callback :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function updateCallback(data)
    {     
        var i = 0;
        var messages = data.messages;
     
        while(i < data.messages.length){  
            appendMessage(data.messages[i]);
            i++;
        }
     
        saveLastMsgID = lastMsgID;
        doUpdate = updateInProgress = false;
    }
    Le script php qui est appelé (je l'ai simplifié au max pour que ce soit plus clair, le reste n'étant pas en rapport direct avec la requête) :

    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
     
    <?php
     
        /* ... */ 
        
        function sendResponse($messages,$date)
        {
            header('content-type: application/json; charset=utf-8'); 
            header("Access-control-allow-origin: *");
            header ("Access-Control-Allow-Headers: x-requested-with", true);
            header('Access-Control-Allow-Methods: GET,OPTIONS');
     
            $datas = array();
            
            for($i = 0 ; $i < count($messages) ; $i++){
                $msg = $messages[$i];
                $message = null;
                $message->sender = $msg->getSender();
                $message->date = $date;
                $message->msg = stripslashes($msg->getContent());
                $message->carrier = $carrier;
                $datas[] = $message;
            }
            $data->messages = $datas;
            echo $_GET['callback']. '('. json_encode($data) . ')'; 
        }
    ?>
    Apparemment, Chrome effectue bien la requête, mais je ne reçoit pas la réponse. Donc, je pense que ce serait le JSONP qui serait mal formaté ou qu'une option dans ma requête AJAX est incorrecte.

    Je sèche depuis un bon moment là-dessus, donc si vous avez une idée n'hésitez pas, je suis tout ouïe

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Merci, mais dans ce cas-ci j'utilise JSONP et pas JSON. Il me semble que si je met json dans le dataType, ça ne fonctionne pas ...

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Je ne vois nulle part dans la doc un dataType jsonp ...
    je ne vois que json
    Quelle différences fais tu entre json et jsonp ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Le JSONP est une amélioration du JSON. Grâce à lui tu peux exécuter des requêtes ajax cross dromain

    http://en.wikipedia.org/wiki/JSONP

    http://api.jquery.com/jQuery.ajax/

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    C'est que le string jsonp retourné est mal formaté ?
    As tu un exemple de chaine jsonp retourné ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    C'est ce que j'ai pensé aussi. Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    jQuery17206598098510228856_1336473458584({
    	"messages":[{
    		"sender":"Fred",
    		"date":"12:37",
    		"msg":"gdfgdfgdf",
    		"carrier":"\n"
    		}]
    	})
    Je l'ai testé avec des validateurs JSON en ligne et il est apparemment valide

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    a tout hasard
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Désolé de ne répondre que maintenant, j'ai du m'absenter depuis la fin de la semaine passée.

    J'ai testé avec ton idée, mais ça ne marche pas plus. J'ai essayé de retourner une simple variable contenant 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header('content-type: application/javascript; charset=utf-8'); 
    $data->test = 1;
    echo $_GET['callback']. '('. json_encode($data) . ')';
    Et je récupère bien la valeur sous firefox mais pas sous chrome. Je n'y comprends rien

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    que retourne cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_GET['callback']. '('. json_encode($data) . ')';
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Voilà ce que je reçois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jQuery172006125229682373101_1336982940202({"messages":[{"sender":"Fred","date":"10:09","msg":"test","carrier":"\n"}]})
    Je viens tester quelque chose en m'inspirant de ce lien : http://stackoverflow.com/a/8981627/1382281. J'ai retiré dans ma requête ajax le datatype : jsonp et chrome arrive dans la méthode success, par contre je n'arrive à récupéré les données.

    Voici le code que je reçois pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ({"messages":[{"sender":"Fred","date":"10:05","msg":"gfdgfdgdfcxg","carrier":"\n"}]})

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ben c'est pas un format de jsonp ce que tu as dans ton retour si ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Le premier si, mais chrome semble ne pas l'accepter ou ne pas accepter autre chose.

  14. #14
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    enlève les () autour ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    J'ai déjà essayé mais alors je dois enlever le callback et ma requête ne fonctionne plus ...

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    oui mais c'est justement le callback qui fout ton format en l'air

    mets le callback dans le success
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    success: function(data){
                callbackt(data);
    }
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ou alors tu gardes le retour avec le callback mais tu modifies le dataType à script ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Voici à quoi ressemble mon code pour le moment :

    ma fonction de mise à jour :

    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
    function update()
    {
        $.ajax({
            url : url,
            dataType: "jsonp",
            data : {'code' : 'message/update',
                    'save_id' : saveLastMsgID,
                    'last_id' : lastMsgID,
                    'session_id' : sessionID,
                    'user' : userName
            },
            success: function(data){
     
                var i = 0;
                var messages = data.messages;
     
                while(i < data.messages.length){  
                    appendMessage(data.messages[i]);
                    i++;
                }
                saveLastMsgID = lastMsgID;
                doUpdate = updateInProgress = false;
            }
        });
    }
    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
     
        function sendResponse($messages,$date)
        {
            header('content-type: application/javascript; charset=utf-8'); 
            $datas = array();
     
            for($i = 0 ; $i < count($messages) ; $i++){
                $msg = $messages[$i];
                $message = null;
                $message->sender = $msg->getSender();
                $message->date;
                $message->msg = stripslashes($msg->getContent());
                $message->carrier = $carrier;
                $datas[] = $message;
            }
     
            $data->messages = $datas;
            echo $_GET['callback']. '('. json_encode($data) . ')'; 
        }
    Si j'enlève le callback dans mon fichier php et que je garde le "datatype : jsonp" dans ma requête jquery, ça ne fonctionne sur aucun navigateur.

    Si je garde le callback et que je garde le datatype, ça fonctionne sous firefox uniquement

    Si j'enlève le datatype, j'arrive dans ma fonction success sous firefox et sous chrome, mais je n'arrive pas à traiter les données à cause des '('. Si je les retires le callback ne se fait pas car j'obtiens le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jQuery172031897191379441114_1336985839635 {"messages":[{"sender":"Fred","date":"11:01","msg":"fsdfsdfsd","carrier":"\n"}]}
    Donc pour bien faire il faudra que j'arrive à avoir mon callback sans les parenthèses car j'obtiens ce code ci : " mais je ne vois pas comment...

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ou alors tu gardes le retour avec le callback mais tu modifies le dataType à script ?

    Je vais tester et je te dis quoi

    PS: merci pour ton aide et ta rapidité en tout cas

Discussions similaires

  1. Probleme CSS: Bon affichage menu sur Firefox mais pas sur IE7
    Par jisko42 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/02/2010, 15h08
  2. Un lien marche sur IE mais pas sur Firefox
    Par Arsofts dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/07/2009, 15h33
  3. Réponses: 1
    Dernier message: 23/09/2008, 21h37
  4. Calcul marche sur IE mais pas sur Firefox
    Par Akim13 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/05/2008, 18h22
  5. Eval qui fonctionne sur Firefox mais pas sur IE :D
    Par Comawhite dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/10/2006, 11h31

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