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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top