2013-09-22 94 views
0

我试图将Typeahead.js实现到我的网站。以JSON格式返回Mysql SQL结果

的typeahead.js会从远程网页,将返回JSON,
是这样的:http://example.org/search?q=%QUERY

对于我的网站,这是我写的PHP:

$q=mysql_real_escape_string($_GET['q']); 

$getship= @mysql_query('SELECT * FROM `tbl` WHERE data1 LIKE \'%'.$q.'%\' OR schar LIKE \'%'.$q.'%\';'); 

while($tbl=mysql_fetch_array($getship)){ 
    $id=$tbl['id']; 
    $data1=$tbl['data1']; 
    $fplod=explode(" ",$data1); 
    $data2=$tbl['data2']; 
    $splod=explode(" ",$data2); 
    $data3=$tbl['data3']; 
    $data4=$tbl['data4']; 
    echo '{ 
      "value":'.$id.', 
      "tokens":["'.$fplod[0].'","'.$fplod[1].'","'.$splod[0].'","'.$splod[1].'"], 
      "data1" :"'.$data1.'", 
      "data2":"'.$data2.'", 
      "data3":"'.$data3.'", 
      "data4":"'.$data4.'" 
     }'; 
} 

但是,当我要求那种先进的东西返回时,它似乎返回在text/html中而不是application/json screenshot from Chrome browser

我该如何使这个工作?

在此先感谢

+0

另外,我对JSON并不熟悉,所以我不确定我的JSON结构是否适合TypeAhead的工作......但我会在稍后处理它(只要解决这个问题,我认为这段代码不会运行的原因) – potasmic

+0

是不是由客户端应用程序设置的答案类型,然后由服务器用于响应? –

回答

2

您可以自己设置Content-Type头。在发送任何输出之前,请致电header

header('Content-Type: application/json'); 
+0

谢谢!我使用这段代码是因为我不喜欢使用json编码器。 – potasmic

+1

@KoiFish:呃,你应该使用两者。 JSON编码器有什么问题?这将会更安全。而事实上,你也有SQL注入问题...... – Ryan

2

这是无效的JSON。你的名字没有引号。 PHP已经内置了json编码/解码功能,因此您不必自己构建字符串。

echo json_encode(array("value" => $id /* etc 
0

这是不是你的数据手动转换成JSON一个很好的做法,而使用json_encode

$data = array(); 
while($tbl=mysql_fetch_array($getship)){ 
    $data[] = $tbl; 
} 
$return = array("data"=>$data); 
echo json_encode($return); 
0

尝试类似:

while($row = mysql_fetch_array($getship, MYSQL_ASSOC)) 
{ 
    $row_set[] = $row; 
} 

echo json_encode($row_set); 

你也可以使用mysql_fetch_assoc。