2010-04-08 2 views
0

Je souhaite utiliser javascript/jquery pour déterminer si un fichier xml existe. Je n'ai pas besoin de le traiter; J'ai juste besoin de savoir si c'est disponible ou non, mais je n'arrive pas à trouver une vérification simple.jquery xml existe

Voici ce que j'ai essayé:

jQuery.noConflict(); 

    jQuery(document).ready(function(){ 
    var photo = '223'; 
    var exists = false; 

    jQuery.load('/'+photo+'.xml', function (response, status, req) { 
     if (status == "success") { 
     exists = true; 
     } 
    }); 
    }); 
+0

existe où? sur le serveur ou localement? – Anurag

Répondre

3

En supposant que vous parlez d'un fichier xml sur le serveur, vous pouvez faire une demande de paiement ajax puis écrire un gestionnaire d'erreur personnalisé pour vérifier le message de réponse d'erreur. Vous aurez besoin de savoir quel est le code exact du message d'erreur pour un fichier manquant (généralement 404). Vous pouvez utiliser Firebug Console pour vérifier le message d'erreur et le code exact.

$.ajax({ 
    type: "GET", 
    url: "text.xml", 
    dataType: "xml", 
    success: function(xml) { 
     alert("great success"); 
    }, 
    error: function(xhr, status, error) { 
     if(xhr.status == 404) 
     { 
      alert("xml file not found"); 
     } else { 
      //some other error occured, statusText will give you the error message 
      alert("error: " + xhr.statusText); 
     } 
    } //end error 
}); //close $.ajax(
+0

cela fonctionne merci – mcgrailm

+2

C'est une bonne réponse, mais il semble qu'il serait plus logique de vérifier 'xhr.status === 404', plutôt que' xhr.statusText == "Not Found" ', car le statut contiendra un code d'erreur numérique plutôt qu'une chaîne arbitraire qui peut ou non être définie par le gestionnaire d'erreurs du serveur en fonction de l'implémenteur. Si vous voulez vraiment être robuste, vous pouvez vérifier 'if (xhr.status> == 400) {alert ('failed'); } '. –

+0

@Nathan Taylor excellente suggestion, j'ai mis à jour ma réponse. –

0

Votre question n'est pas clair pour moi. Si je comprends bien, vous voulez vérifier si un fichier (le XML) est présent ou non sur le serveur HTTP.

C'est correct? Si oui, vous pouvez juste faire:

$.get('url-to-file.xml', function(response, status, req) { 
    if (status == 'success') { 
     alert('exists'); 
    } 
}); 

ÉDITÉ: Comme l'a souligné par @lzyy les commentaires, .get() appelle seulement le rappel en cas de succès. Cependant, je m'en tiendrai au .load() en utilisant $ (document) comme sélecteur. Voir:

$(document).load('url-to-file.xml', function(response, status, req) { 
    if (status == 'success') { 
     alert('exists'); 
    } else if (status == 'error') { 
     alert('doesnt exist'); 
    } 
}); 
+0

actuellement je reçois jQuery.load n'est pas une fonction – mcgrailm

+0

Désolé, je voulais dire $ .get(). Correction de l'extrait – jweyrich

+0

$ La fonction de rappel de .get() ne sera exécutée que si la réponse a un code de réponse réussi – limboy