Bonjour,

J'ai un problème avec la fonction .load() de jQuery pour charger le contenue d'un fichier php.
Je ne peux pas rentrer dans les détails de l'application mais cela se présente sous la forme suivante:

  • Plusieurs serveur exécute une application web chargée localement (les serveurs sont reliés à internet).
  • L'application charge avec la fonction .load() un fichier php (depuis une source externe aux serveurs) qui contient une structure html qui est amener à évoluer.
  • Le fichier structure html est en php pour ajouter : header('Access-Control-Allow-Origin: *', true); pour autoriser l'origine externe de la requête.

La fonction fonctionne parfaitement avec Chrome ou Firefox j'obtient le résultat souhaité. Ma structure html s’injecte dans le body de l'application exécuté sur les serveurs.

Ce morceau de code ne fonctionne pas avec Internet Explorer:

  • Pas d'erreur de script
  • Pas de requête GET dans l'analyse de réseau
  • Le code du callback est exécuté comme si la requête s'était exécutée avec succès.

Sur les serveurs:

$("body").load("http://mondomaine.com/ma_structure_html.php",function(){
    alert( "Chargement ok" );
});

La structure commune:

<?php header('Access-Control-Allow-Origin: *', true); ?>
<table>
<tr>
    <td>Mon html Commun</td>
</tr>
</table>

Je cherche donc une alternative pour réaliser la même injection sur tous les navigateurs. Si quelqu'un à déjà eu le même problème ce serais sympa de me donner un petit coup de pouce.

Vous remerciant par avance pour votre aide.

Raphaël

3 réponses


Raphael12
Auteur
Réponse acceptée

J'ai trouvé la solution en utilisant une autre méthode.

X/DomainRequest n'a pas résolue mon problème.

J'ai donc passer le contenue de ma page web en datatype : jsonp qui autorise les requete GET cross domaine et cross navigateur.

exemple:

$.ajax({
    type: 'GET',
    url: 'http://www.votre-url.com/htmlToJson.php',
    data: {
        field: 'value'
    },
    dataType: 'jsonp',
    crossDomain: true,
}).done(function(data){
    console.log(data'0'].replace("\'","'"));
}).fail(function(error){
    console.log(error.statusText);
});

Cela fonctionne maintenant sur IE et les autres navigateurs.

La fonction load() de jQuery exécute une requête Ajax avec XMLHttpRequest, qui ne fonctionne pas en cross domain sur IE<10.
Pour que ça fonctionne sur IE il faut que tu passes par X/DomainRequest (faut enlever le /, je l'ai mis parce que sinon ça fait un smiley XD).
Tu trouveras plus d'infos et comment faire sur ce tuto Open Classrooms : http://fr.openclassrooms.com/informatique/cours/ajax-et-l-echange-de-donnees-en-javascript/l-xmlhttprequest-cross-domain

Ok je vais voir ce que ça donne avec cette méthode et indiquerais sur le sujet le résultat.

Merci !