плагин автозаполнения jquery - выборка работает - fetchAll не - PullRequest
0 голосов
/ 17 сентября 2010

Если у меня есть что-то подобное со стороны сервера, из выборки:

array(1) { [0]=>  array(1) { ["nome"]=>  string(7) "aaaa.br" } } [{"nome":"aaaa.br"}]

JSON выше:

[{"nome":"aaaa.br"}]

Это работает:

parse: function(data) {
 return $.map(eval('('+data+')'), function(result) {
   return {
    data: result,
    value: result.nome,
    result: result.nome
   }
  });
}

Результат успешно проанализирован.

Если вместо fetch я переключусь на fetchAll, дамп будет выглядеть так (здесь только первый индекс в качестве примера):

array(65) { [0]=>  array(1) { ["nome"]=>  object(stdClass)#7 (1) { ["nomeDominio"]=>  string(7) "aaaa.br" } }

Преобразование json выше:

string(2632) "[{"nome":{"nomeDominio":"aaaa.br"}}

Здесь результат не был успешно проанализирован.

Так что я считаю, что нужно что-то изменить на стороне js.Но я абсолютно невежественен.

ОБНОВЛЕНИЕ: nomeDominio происходит из метода fetchObj PDO и соответствует имени столбца в базе данных.Это естественное поведение для извлечения с PDO, когда используется опция FETCH :: OBJ.

PHP-часть этого js:

$keyword = addslashes($_GET["q"]);

$comandos = new ComandoController();

$arr = $comandos->recebeNomeDominios($keyword);

if(is_array($arr))
{
    echo json_encode($arr);

}


public function recebeNomeDominios($keyword)
{
   $DominioDao = new DominioDao();

   $objecto = $DominioDao->recebeNomeDominios($keyword);

   return $this->jsonArray($objecto);

}

private function jsonArray($objecto)
{
  $json = array();
  if(isset($objecto) && !empty($objecto))
  {
    foreach($objecto as $obj)
    {
      $json[] = array('nome' => $obj);

    }
  }
   return $json;
}

Наконец:

public function recebeNomeDominios($keyword)
{
  try
  {
     $stmt = $this->_dbh->prepare("SELECT d.nomeDominio FROM dominio d WHERE d.nomeDominio LIKE '%".$keyword."%'");
$stmt->execute();
$resultado = $stmt->fetch(PDO::FETCH_OBJ);
return $resultado;
}
catch (PDOException $ex)
{
  echo "Erro: " . $ex->getMessage();
}
}

Любой совет?MEM

Ответы [ 2 ]

1 голос
/ 18 сентября 2010
$comandos = new ComandoController();
$arr = $comandos->recebeNomeDominios($keyword);
echo json_encode($arr);


class ComandoController {
  public function recebeNomeDominios($keyword)
  {
    $stmt = $this->_dbh->prepare('
      SELECT
        d.nomeDominio as nome
      FROM
        dominio
      WHERE nomeDominio LIKE :keyword
    ');
    $stmt->bindParam(':keyword', $keyparam);
    $keyparam = '%'.str_replace('%', '\\%', $keyword) . '%';
    $stmt->execute();
    return $stmt->fetchALL(PDO::FETCH_ASSOC);
  }
...
0 голосов
/ 17 сентября 2010

Если вы возвращаете один массив (fetch), то вам нужно собирать из него данные следующим образом:

var name = data.name;
var age = data.age;
var gender = data.gender;
// Do something with values here

Если вы используете fetchAll, это, вероятно, вернет массив массивов (многомерный массив), которыйвам нужно будет перебирать.Если посмотреть на $.map, то похоже, что вы используете jQuery.Выполните итерацию по многомерному массиву, как это

jQuery.each(data, function() {
    name = this.name;
    age = this.age;
    gender = this.gender;
    // Do something with values here
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...