2010-05-08 6 views
0

Je l'ai utilisé ceci:XML Parsing avec jQuery

$(document).ready(function() { 
$.ajax({ 
    type: "GET", 
    url: "http://domain.com/languages.php", 
    dataType: "xml", 
    success: xmlParser 
    }); 
}); 

function xmlParser(xml) { 
    $('#load').fadeOut(); 
    $(xml).find("result").each(function() { 

    $(".main").append('' + $(this).find("language").text() + ''); 
    $(".lang").fadeIn(1000); 

    }); 
} 

J'ai utilisé un fichier XML local sur mon ordinateur, il fonctionne très bien, mais quand je change l'URL d'un site Web, il ne cesse de charger tous les temps ...

Comment puis-je faire fonctionner cela?

Répondre

1

Il existe des restrictions sur les demandes inter-domaines. En particulier, si vous souhaitez interroger domain.com, cette page devrait être sur domain.com (http://domain.com/my_page.html). Vous ne pouvez pas interroger domain.com à partir de localhost ou de votre système de fichiers (bien qu'il existe des astuces pour cela).

éditer
Ce hack est très facile et a fonctionné pour moi. Mais vous, évidemment, ne pouvez pas l'utiliser pour interroger localhost.
http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

0

Oui, le same origin policy limite ce que vous pouvez extraire d'autres sites. Si vous le pouvez, téléchargez le fichier XML, enregistrez-le sur votre domaine, puis travaillez votre magie avec jQuery. Je l'ai fait un certain nombre de fois (meilleur pour l'automatiser avec cURL/wget et un travail de cron). Ou utilisez quelque chose comme SimplePie.

Remarque, sub.domaine.com et domain.com sont également considérés comme des domaines différents.

1

Vous devez proxy le XML via un script sur votre site.

Par exemple getxml.php:

<?php 

if(isset($_GET['q']) && isAjax()) 
{ 
    $q = strip_tags($_GET['q']); 
    header("Status: 200"); 
    header("Content-type: text/xml"); 
    echo file_get_contents($q,0); 
    exit(); 
} 

function isAjax() { 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
    ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); 
} 
?> 

Ensuite, vous seriez modifier votre URL pour:
url: "http://mysite.com/getxml.php?q=http://domain.com/languages.php"

Je ne suis pas sûr de toutes les implications de sécurité avec seulement vérifier la HTTP_X_REQUESTED_WITH , donc vous devrez peut-être ajouter plus de sécurité pour vérifier ajax, mais cela fonctionne comme-est.