jQuery的自动完成插件 - 获取工程 - 使用fetchall不 [英] jquery autocomplete plugin - fetch works - fetchAll doesn't

查看:198
本文介绍了jQuery的自动完成插件 - 获取工程 - 使用fetchall不的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有这样的事情从服务器端,从获取:

 阵列(1){[0] =>阵列(1){[咔嗒] =>串(7)aaaa.br}} [{咔嗒:aaaa.br}]

以上的JSON是:

  [{诺姆:aaaa.br}]

本作品:

 解析:功能(数据){
 返回$ .MAP(的eval('('+数据+')'),功能(结果){
   返回{
    数据:结果,
    值:result.nome,
    结果:result.nome
   }
  });
}

结果成功解析。

如果,而不是取,我改为使用fetchall,转储得到这样的(这里只有第一个指数为例):

 阵列(65){[0] =>阵列(1){[咔嗒] =>对象(stdClass的)#7(1){[nomeDominio] =>串(7)aaaa.br}}

以上的JSON的转换:

 字符串(2632)[{诺姆:{nomeDominio:aaaa.br}}

下面,其结果是没有成功解析。

所以,我认为需要在JS一边要改变一些东西。
但我绝对一无所知。

更新:
所述nomeDominio距离fetchObj PDO方法,并对应于数据库中的列名。这是一种自然的行为与PDO取FETCH :: OBJ选项时使用。

的这个js PHP的一部分是:

  $关键字=和addslashes($ _ GET [Q]);$ comandos =新ComandoController();$ ARR = $ comandos-> recebeNomeDominios($关键字);如果(is_array($ ARR))
{
    回声json_en code($ ARR);}
公共职能recebeNomeDominios($关键字)
{
   $ DominioDao =新DominioDao();   $ objecto = $ DominioDao-> recebeNomeDominios($关键字);   返回$这个 - > jsonArray($ objecto);}私有函数jsonArray($ objecto)
{
  $ JSON =阵列();
  如果(使用isset($ objecto)及&放大器;!空($ objecto))
  {
    的foreach($ objecto为$ OBJ)
    {
      $ json的[] =阵列('诺姆'=> $ OBJ);    }
  }
   返回$ json的;
}

最后:

 公共职能recebeNomeDominios($关键字)
{
  尝试
  {
     $语句= $这个 - > _dbh-> prepare(选择d.nomeDominio FROM DOMINIO d其中d.nomeDominio LIKE'%$关键字%。');
$ stmt->执行();
$ resultado = $ stmt->取(PDO :: FETCH_OBJ);
返回$ resultado;
}
赶上(PDOException $ EX)
{
  回声埃罗。 $ EX->的getMessage();
}
}

有何建议?
MEM


解决方案

  $ comandos =新ComandoController();
$ ARR = $ comandos-> recebeNomeDominios($关键字);
回声json_en code($ ARR);
类ComandoController {
  公共职能recebeNomeDominios($关键字)
  {
    $语句= $这个 - > _dbh-> prepare('
      选择
        d.nomeDominio如诺姆
      从
        DOMINIO
      WHERE nomeDominio LIKE:关键字
    ');
    $ stmt-> bindParam(':关键字',$ keyparam);
    $ keyparam =%。str_replace函数('%','\\\\%',$关键字)。 %;
    $ stmt->执行();
    返回$ stmt->使用fetchall(PDO :: FETCH_ASSOC);
  }
...

If I have something like this from the server side, from a fetch:

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

The json of the above is:

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

This Works:

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

The result is parsed successfully.

If, instead of fetch, I change to fetchAll, the dump gets like this (here only the first index as example):

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

The json conversion of the above:

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

Here, the result is not successfully parsed.

So I believe something needs to be changed on the js side. But I'm absolutely clueless.

UPDATE: The nomeDominio is from the fetchObj PDO method, and corresponds to the column name on the database. It's a natural behaviour for fetch with PDO when FETCH::OBJ option is used.

The php part of this js is:

$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;
}

Finally:

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();
}
}

Any advice? 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);
  }
...

这篇关于jQuery的自动完成插件 - 获取工程 - 使用fetchall不的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆