Renvoi de données ne fonctionne pas dans jQuery avec Ajax
Question
J'ai développé du code avec Ajax et jQuery. J'ai une réponse de my.php, et j'ai essayé d'extraire les valeurs de la réponse. Voici le code (HTML):
Mon.php
?php
echo '<div id="title">My Title </div>';
echo '<div id="message"> My message </div>';
?>
J'essaie d'extraire le titre et le message afin que mon code soit affiché en dessous.
<head>
<script type="text/javascript" src="js/jquery-1.2.6.js"></script>
<script type="text/javascript">
$(document).ready(function() {
alert("OK");
$.ajax({
type:"POST",
url: "my.php",
cache:false ,
success: function(data){
$("#response").html(data);
var $response = $(data);
var oneval = $response.find('#title').text();
var subval = $response.find('#message').text();
alert(oneval);
}
});
});
</script>
</head>
<body>
<div id="response">
</div>
</body>
</html>
...
Le problème, c’est que lorsque j’ai essayé d’alerter, cela ne fonctionne pas. Quel est le problème avec cette logique? Dois-je utiliser une autre fonction pour extraire le titre et le message?
La solution
OK, accédez à http://jsbin.com/udige/ et vous pourrez le voir fonctionner. .
La clé utilise .filter
, pas .find car les deux div sont des éléments racines de la réponse. Mon erreur.
Procédez comme suit:
success: function(data){
$("#response").html(data);
var $response = $(data);
var oneval = $response.filter('#title').text();
var subval = $response.filter('#message').text();
alert(oneval);
}
Autres conseils
Si la réponse revient telle que vous l'avez écrite, le code que je vous ai donné fonctionnera.
Vous devez vraiment apprendre à utiliser un débogueur ( Firebug ). et insérez des points d'arrêt dans votre code afin de pouvoir utiliser la console pour tester les sélecteurs et consulter les valeurs des variables, etc. De plus, vous devriez vraiment avoir répondu à la question initiale et à la réponse que j’ai donnée plutôt que de poser une toute nouvelle question, d’autant plus que vous n’avez même pas référencé l’original.
Essayez plutôt d'utiliser ceci:
var oneval = $("#response #title").text();
var subval = $("#response #message").text();