使用php生成一组javascript代码

时间:2011-12-18 19:29:06

标签: php

我正在尝试使用php生成一组“{URL.callback}”以在javascript中使用。通过使用数据库。这是我的代码:

$sql="select * from search where keywords LIKE '$bb%' ORDER BY keywords ";  

     $result=mysql_db_query($dbname,$sql);

     echo $_GET["callback"] . "({ t:\"$t\", r:[";
    while ( $rs=mysql_fetch_array($result))    {
        $keywords=$rs[keywords];

         echo "" ."\"$keywords\"".","." ";
    }

echo"] })";

这是它返回的代码:

({ t:"", r:["example1", "example2", "example3",] })

一切似乎都是正确的,除了(,)最后(在“example3”之后)我想要摆脱。因为它不正确,不能与之一起使用。

问题是:如何正确生成它?如何摆脱最后(,)?

5 个答案:

答案 0 :(得分:3)

不要自己生成JSON,而是使用json_encode为您完成繁重的工作。

$keywords = array ();

while ( $rs=mysql_fetch_array($result)) {
  $keywords[] = $rs['keywords'];
}

echo json_encode ($keywords);

首选解决方案

虽然您打算使用json_encode将$ keywords附加到您的其他数据集,并在整个结构中使用json_encode

$json_data = array (
  't' => '',
  'r' => array ()
);

while ( $rs=mysql_fetch_array($result)) {
  $json_data['r'][] = $rs['keywords'];
}

echo "(".json_encode ($json_data).")";

如果你想自己做一些(相当干净的)选项,请参阅下面的片段。


将所有检索到的关键字附加到数组中,并使用带有“,”的join作为分隔符,以便在while循环后形成一个字符串     $ keyword_array = array();

while ($rs=mysql_fetch_array($result))    {   
  $keywords=$rs[keywords];

  $keyword_array = "\"$keywords\"";
}

echo join (', ', $keywords);

在while循环前使用mysql_num_rows获取$result中的行数,并在处理最后一个元素时不附加,

$n_rows = mysql_num_rows ($result);

for ($i =1; $rs = mysql_fetch_array ($result); ++$i) {
  $keywords=$rs[keywords];

  echo "\"$keywords\"";

  if ($i != $n_rows)
    echo ", ";
}

答案 1 :(得分:1)

试试这个:

$output = '';
while ( $rs=mysql_fetch_array($result))    {
    $keywords=$rs[keywords];

     $output .= "" ."\"$keywords\"".","." ";
}
$output = substr($output, 0, -2);
echo $output;

答案 2 :(得分:0)

希望这适合你

$sql="select * from search where keywords LIKE '$bb%' ORDER BY keywords ";  

 $result=mysql_db_query($dbname,$sql);

 echo $_GET["callback"] . "({ t:\"$t\", r:[";
$keywords_print = array();
while ( $rs=mysql_fetch_array($result))    {
    $keywords=$rs[keywords];

     $keywords_print[] = "\"$keywords\"";
}
echo implode(",",$keywords_print);
echo"] })";

答案 3 :(得分:0)

解决方案

在PHP中创建数据结构(多维数组),让json_encode()生成JS数据结构。

实施例

看起来像这样:

$sql="select * from search where keywords LIKE '$bb%' ORDER BY keywords ";  
$result=mysql_db_query($dbname,$sql);

$data = array(
    't' => $t,
    'r' => array(),
);

while ( $rs=mysql_fetch_array($result)) {
    $data['r'][] = $rs['keywords'];
};

然后显示它:

echo $_GET["callback"].'('.json_encode($data).');';

答案 4 :(得分:0)

我认为最干净的方法是创建一个元素数组,然后使用,作为分隔符进行内爆。

// added initial `"`
echo $_GET["callback"] . "({ t:\"$t\", r:[\"";
while ( $rs=mysql_fetch_array($result))    {
    $keywords=$rs[keywords];
    $arr[] = $keywords;
}
echo implode('", "', $arr);
// added closing `"`
echo "\"] })";