2013-09-22 133 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。