La restituzione dei dati non funziona in jQuery utilizzando Ajax
Domanda
Ho sviluppato codice con Ajax e jQuery. Ho una risposta da my.php, e l'ho fatto ha tentato di estrarre i valori della risposta. Qui il codice (HTML):
My.php
?php
echo '<div id="title">My Title </div>';
echo '<div id="message"> My message </div>';
?>
Provo ad estrarre il titolo e il messaggio, quindi il mio codice è sotto.
<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>
...
Il problema è quando ho provato ad avvisare, non funziona. Cosa c'è di sbagliato in questa logica? Dovrei usare un'altra funzione per estrarre il titolo e il messaggio?
Soluzione
OK, vai a http://jsbin.com/udige/ e puoi vederlo funzionare .
La chiave sta usando .filter
, non .find poiché i due div sono elementi root nella risposta. Il mio errore.
Fondamentalmente fai quanto segue:
success: function(data){
$("#response").html(data);
var $response = $(data);
var oneval = $response.filter('#title').text();
var subval = $response.filter('#message').text();
alert(oneval);
}
Altri suggerimenti
Se la risposta sta tornando mentre l'hai scritta, allora il codice che ti ho dato funzionerà.
Devi davvero imparare come usare un debugger ( Firebug ) e inserire punti di interruzione nel codice in modo da poter utilizzare la console per testare i selettori e esaminare i valori delle variabili, ecc. Inoltre avresti dovuto davvero rispondere alla domanda originale e alla risposta che ho dato piuttosto che aprire una domanda completamente nuova, soprattutto perché non hai nemmeno fatto un riferimento incrociato al tuo originale.
Prova invece a utilizzare questo:
var oneval = $("#response #title").text();
var subval = $("#response #message").text();