2009-11-07 8 views
1

Quelqu'un pourrait-il me dire si ceci:Ces appels JQuery sont-ils identiques?

$.ajax({ 
     url: 'test.html', 
     success: function(data) { 
      alert("Data Loaded: " + data); 
     } 
    }); 

est la même que celle-ci:

$.ajax({ 
     url: 'test.html', 
     success: function(data) { 
      alert("Data Loaded: " + $(data).html()); 
     } 
    }); 

Lors de la récupération ce contenu:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>blank page</title> 
</head> 
<body> 
    <div id="content">Some content.</div> 
</body> 
</html> 

Je demande parce que le second jquery appel ajax fait pas alerte. Quelqu'un pourrait-il expliquer pourquoi les deux versions des alertes ne sont pas les mêmes s'il vous plaît?

Répondre

2

Citant le jQuery Documentation for the $-function:

éléments simples sans attributs, par exemple, "", sont créés par document.createElement. Tous les autres cas sont analysés en affectant la chaîne à la propriété .innerHTML d'un élément div . La chaîne HTML ne peut pas contenir des éléments non valides dans un div, tel que html, head, body, ou des éléments de titre.

Vous ne pouvez pas mettre un plein page html dans le -fonction $, seuls les éléments qui sont valables dans un div -Element. Étant donné que le doctype est XHTML, le premier exemple renvoie XML. Retour au début | Envoyer des commentaires Résolution

+0

Je crois que le problème est comme je l'ai dit dans ma réponse, comme mentionné dans votre lien "Une chaîne de HTML pour créer à la volée.Notez que cela analyse HTML, * pas * XML." –

+0

Peu importe, car ni une page HTML complète, ni une page XHTML/XML ne peuvent être mises dans la fonction $. Juste HTML-éléments autorisés sous div et il HTML/XML n'a pas d'importance. – stefanw

+0

Lire plus loin par la section Ajax des docs en ligne JQuery (.load - http://docs.jquery.com/Ajax/load#urldatacallback) je vois; "Dans jQuery 1.2, vous pouvez maintenant spécifier un sélecteur jQuery dans l'URL, ce qui filtrera le document HTML entrant, en injectant uniquement les éléments correspondant au sélecteur." Cela implique-t-il que load() n'utilise pas la fonction $()? Si oui, comment cela peut-il fonctionner? –

1

Ainsi, lorsque vous alertez le XML, c'est correct. Dans le second exemple, jQuery doit penser que c'est XML, qui n'est pas accessible avec .html().

Pour obtenir le deuxième exemple travailler essayez l'option

dataType: "html" 
+0

L'ajout de votre ligne au deuxième exemple n'a pas fonctionné pour moi, pour les raisons indiquées dans la réponse ci-dessus, par stefanw, je crois. –

0

Le deuxième exemple ne demande pas alert parce qu'une erreur se produit à l'intérieur de la fonction de rappel success. Allumez le firebug et vous devriez voir qu'une erreur est en train de se produire (bien que la ligne sur laquelle firebug vous dit que cela se passe ne soit pas précise). Si, pour une raison quelconque, firebug ne vous indique pas qu'une erreur se produit, c'est parce que jQuery gère avec élégance les exceptions des fonctions affectées à success. Vous pouvez envelopper votre alert avec un bloc try/catch et voir par vous-même.

$.ajax({ 
     url: 'test.html', 
     success: function(data) { 
      try { 
       alert("Data Loaded: " + $(data).html()); 
      } catch (e) { 
       alert("Error happened: " + e.message); 
      } 
     } 
    }); 

Cette erreur survient car les données renvoyées ne sont pas un élément HTML réel.

Questions connexes