2013-09-22 2 views
0

Я пытаюсь реализовать Typeahead.js на моем сайте.Возвращает результаты Mysql SQL в формате JSON

В 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, а не в приложении/json screenshot from Chrome browser.

Как я могу заставить это работать?

Заранее спасибо

+0

Кроме того, я не знаком с JSON, поэтому я не уверен, что моя структура JSON верна для работы TypeAhead ... Но я буду работать над этим позже (как только это будет разрешено, подумайте, почему этот фрагмент не будет запущен) – potasmic

+0

Не является ли тип ответа, установленный клиентским приложением, а затем просто используется сервером для ответа? –

ответ

2

Вы можете установить Content-Type Header самостоятельно. Перед любой вывод посылается по телефону header:

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

Спасибо! Я использовал этот код, потому что мне не нравится использовать json encoder. – potasmic

+1

@KoiFish: Er, вы должны использовать оба. Что случилось с кодировщиком 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.

Смежные вопросы