dados que retornam não está trabalhando em jQuery usando Ajax
Pergunta
Eu desenvolvi código com Ajax e jQuery. Eu tenho uma resposta do my.php, e eu tenho tentou extrair os valores da resposta. Aqui o código (HTML):
My.php
?php
echo '<div id="title">My Title </div>';
echo '<div id="message"> My message </div>';
?>
Eu tento extrair o título e mensagem para o meu código está abaixo.
<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>
...
O problema é quando eu tentei alerta, ele não está funcionando. O que está errado com essa lógica? Devo usar outra função para extrair o título ea mensagem?
Solução
OK, vá para http://jsbin.com/udige/ e você pode vê-lo trabalhando .
A chave é usar .filter
, não .find como os dois divs são elementos raiz na resposta. O meu erro.
Basicamente fazer o seguinte:
success: function(data){
$("#response").html(data);
var $response = $(data);
var oneval = $response.filter('#title').text();
var subval = $response.filter('#message').text();
alert(oneval);
}
Outras dicas
Se a resposta está vindo para trás como você o escreveu, em seguida, o código que te dei vai funcionar.
Você realmente precisa aprender a usar um depurador ( Firebug ) e colocar pontos de interrupção em seu código para que você possa usar o console para seletores de teste e olhar para os valores das variáveis, etc. Além disso, você deve realmente ter respondido à pergunta original e resposta que eu dei ao invés de abrir uma nova pergunta inteira especialmente desde que você não tenha ainda cruzados seu original.
Tente usar este em vez disso:
var oneval = $("#response #title").text();
var subval = $("#response #message").text();