Если у меня есть что-то вроде этого со стороны сервера, из выборки:
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. Но я абсолютно не знаю.
UPDATE: nomeDominio – это метод PDO fetchObj и соответствует имени столбца в базе данных. Это естественное поведение для извлечения с 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
$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); } ...
Если вы вернете один массив (выборка), вам необходимо собрать данные из него
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 });