La devolución de datos no está funcionando en jQuery utilizando Ajax
Pregunta
He desarrollado código con Ajax y jQuery. Tengo una respuesta de mi.php, y tengo Intenté extraer los valores de la respuesta. Aquí el código (HTML):
Mi.php
?php
echo '<div id="title">My Title </div>';
echo '<div id="message"> My message </div>';
?>
Intento extraer el título y el mensaje, por lo que mi código está abajo.
<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>
...
El problema es cuando intenté alertar, no está funcionando. ¿Qué está mal con esta lógica? ¿Debo usar otra función para extraer el título y el mensaje?
Solución
Bien, vaya a http://jsbin.com/udige/ y podrá verlo funcionar .
La clave está usando .filter
, no .find, ya que los dos divs son elementos raíz en la respuesta. Mi error.
Básicamente haz lo siguiente:
success: function(data){
$("#response").html(data);
var $response = $(data);
var oneval = $response.filter('#title').text();
var subval = $response.filter('#message').text();
alert(oneval);
}
Otros consejos
Si la respuesta está regresando a medida que la escribiste, entonces el código que te di funcionará.
Realmente necesitas aprender a usar un depurador ( Firebug ) y ponga puntos de interrupción en su código para que pueda usar la consola para probar los selectores y observar los valores de las variables, etc. Además, realmente debería haber respondido a la pregunta original y la respuesta que di en lugar de abrir una pregunta completamente nueva, especialmente porque ni siquiera ha hecho referencia cruzada a su original.
Intenta usar esto en su lugar:
var oneval = $("#response #title").text();
var subval = $("#response #message").text();