Pergunta
Eu tenho um script para atualizar uma tabela de banco de dados. Preciso devolver uma matriz JSON e atualizar algumas tabelas com o jQuery.
Meu script PHP:
$update = mysql_query("UPDATE PLD_SEARCHES SET STATUS = 1, TOTAL_RESULTS = ".$scrapper->getTotalResults().",RESULTS = $resultCounter WHERE ID = ".$searchId);
$output = array("status"=>"COMPLETED","results"=>$resultCounter,"totalResults"=>$scrapper->getTotalResults());
echo json_encode($output);
Código jQuery:
$("button").live("click", function(event){
event.preventDefault();
$.getJSON("startsearch.php",{ searchId: $(this).val() }, function(data){
alert(data[0].status);
});
Agora ... o problema é que, se eu usar $.post("startsearch.php",{ searchId: $(this).val() }, function(data))
O script é executado e recebo um bom alerta com valor indefinido. Se eu adicionar o parâmetro "JSON", o script não será mais executado. Tentei usar getjson, mas novamente o mesmo problema.
Alguém tem alguma idéia? Estou desesperado ... isso está me incomodando há quase uma semana e ainda não consegui resolvê -lo.
Solução
No seu arquivo php, certifique -se de definir o tipo de conteúdo correto:
header("Content-type: application/json; charset=utf-8");
para que o jQuery possa corretamente eval
a resposta em um objeto JSON.
Outras dicas
Você pode obter seus dados de resposta da seguinte forma:
alert(data.status);
alert(data.results);
alert(data.totalResults);
Por favor, não use alerta, instale o Firebug no seu Firefox ou ative o console JavaScript no Chrome ou Safari. depois disso você pode usar console.log(data);
Meu palpite é que os dados não são uma matriz. também dê uma olhada em cada um () exmaple no jQuery docs http://docs.jquery.com/ajax/jquery.getjson
Bem, estou confiando json2.js
Para analisar os dados JSON retornados da solicitação AJAX. Você pode baixá -lo de http://json.org. Esta biblioteca fornece uma maneira melhor de analisar qualquer string e dará uma exceção se o Sting não estiver no JSON.
Eu sempre escrevo meu pedido de Ajax como este:
$.post(URL,
{ PARAM },
function(data){
try {
var r = JSON.parse(data);
//this for your code above
alert (r.status); //should be 'COMPLETED'
}
catch (e) {
//data is not in json format, or there are another exception in try block
//do something about it
alert('Exception occured, please check the data!');
}
});
Ao processar o JSON, a matriz no PHP se tornará um membro variável no JSON. Então, se no seu PHP for $output['status']
, então em JSON, será r.status
.