Найдите ошибку - Смешивание: объекты данных php (выборочный объект), json и jquery.post () - PullRequest
0 голосов
/ 27 августа 2010

Может кто-нибудь лучше, чем я, заметить проблему здесь. Я не могу его отладить, мои var_dumps, похоже, не дают никакого эффекта из-за использования jquery.post (), поэтому я верю.

У меня ничего не отображается. Я ожидал получить серию li, заполненную значениями в кодировке json.

HTML:

<div id='data'></div>
<form action="">
  <input id="nomeInput" type="text" name="nomeInput" value="" autocomplete="false"/>
</form>
<ul id="listaDominios" style="display: none;">
</ul>

JS:

$(document).ready(function(){
  $('#nomeInput').keypress(function(){
     $.post("testeBasico_1.php", {nomeInput : $('#nomeInput').val()}, function(resposta) {
        for (var x = 0, tamanhoDados = resposta.nomeDominio.length; x < tamanhoDados; x++){
           $('#listaDominios').show();
           $('#listaDominios').append('<li>'+resposta.nomeDominio[x]+'</li>');
        }

      }, "json");

  });//end of keypress;

});//end of document ready;

PHP

public function listaDominios(DominioVo $dominioVo)
{
  try
  {
     $stmt = $this->_dbh->prepare("SELECT d.nomeDominio FROM dominio d WHERE d.nomeDominio LIKE ?");
     $stmt->bindValue(1,'%' . 'a' . '%', PDO::PARAM_STR);
     $stmt->execute();

     $resultado = $stmt->fetchAll(PDO::FETCH_OBJ);

       return $resultado;
    }
    catch (PDOException $ex)
    {
      echo "Erro: " . $ex->getMessage();
    }
}

Если пятно становится трудной добычей, как я могу его обнаружить? Это мой первый опыт работы с Ajax, поэтому мне не нравится отладочная часть. : S

Подозрение: (ОБНОВЛЕНИЕ) Я считаю, что проблема в том, как я пытаюсь перебрать возвращенный JSON. Вот формат эха json_encoded:

[{"nomeDominio":"aaaa.ka"},{"nomeDominio":"agentesdeexecucao.ka"}]

Заранее большое спасибо, MEM

1 Ответ

1 голос
/ 27 августа 2010

Поскольку основанием объекта является массив, вам нужно перебрать его на корневом уровне, поэтому ваш цикл for должен выглядеть следующим образом:

$('#listaDominios').toggle(resposta.length > 0);
for (var x = 0; x < resposta.length; x++){
  $('#listaDominios').append('<li>'+resposta[x].nomeDominio+'</li>');
}

Или маршрут $.each():

$('#listaDominios').toggle(resposta.length > 0);
$.each(resposta, function() {
  $('<li />', { text: this.nomeDominio }).appendTo('#listaDominios');
});

Важной частью является то, что resposta.nomeDominio не является чем-то, поскольку корнем ответа является массив, однако resposta.length получит длину, так что используйте это. Кроме того, так как массив находится в корне и каждый объект в нем имеет свойство nomeDominio, вы хотите, чтобы resposta[x].nomeDominio перешел к текущему индексу (чтобы получить объект), затем вызовите .nomeDominio, чтобы получить свойство. Или используйте маршрут $.each(), в котором this ссылается на текущий объект, в любом случае работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...