2013-03-13 2 views
1

Мне нужна помощь в этом: я делаю автозаполнение в jqGrid, и мне нужно сделать, чтобы вернуть JSON на вход автозаполнения. Я делаю что-то подобное, но в моем автозаполнении просто возвращаю одно значение, а в базе данных у меня более одного. Кто-то может помочь мне в этом. Я делаю возвращение так:JSON - Возвращение JSON на вход jqGrid autocomplete

... 
header("Content-Type: application/json"); 
$i=0; 
while($row = pg_fetch_array($result)) { 
    $response->input['value']=$row[ac_fin_g]; 
    $i++; 
} 
echo json_encode($response); 
... 

Но, к примеру .. у меня есть в базе данных значения для ac_fin_g: {дома, дом, торт}. Если я напишу букву «O», в моем автозаполнении появится «HOUSE» и «HOME», но этого не происходит. Когда я изменить код выше для этого кода (для ввода = «HO»):

... 
header("Content-Type: application/json"); 
$i=0; 
while($row = pg_fetch_array($result)) { 
    $response->input[$i]['value']=$row[ac_fin_g]; 
    $i++; 
} 
echo json_encode($response); 
... 

У меня есть правильный JSON:

{"input":[{"value":"HOME  "},{"value":"HOUSE  "}]} 

Мне очень жаль, но я не знаю, как чтобы исправить это. Кто-нибудь может мне помочь?


UPDATE: Благодаря @Oleg я понял, как это сделать. Для моего случая это:

$i=0; 
while($row = pg_fetch_array($result)) { 
$response[] = $row[ac_fin_g]; $i++; 
} 
echo json_encode($response); 

:)

PS: Это link может быть полезно :)

ответ

0

Сервер должен создавать данные в формате JSON, которые ожидают JQuery UI. Соответствует jQuery UI Autocomplete documentation данные JSON должны быть

["HOME", "HOUSE"] 

или

[{"label": "Home", "value": "HOME"}, {"label": "House", "value": "HOUSE"}] 

вместо

{"input":[{"value":"HOME  "},{"value":"HOUSE  "}]} 

, который вы в настоящее время генерации. Есть способ декодировать любые другие данные JSON на стороне клиента, но лучше просто следовать стандарту JQuery UI Autocomplete.

+0

Спасибо за ответ @Oleg. И мне снова жаль, но как я могу это изменить? Я пробовал так много форм. Форма, которая выглядит как ваша: '$ i = 0; while ($ row = pg_fetch_array ($ result)) {$ response = $ row [ac_fin_g]; $ Я ++; } echo json_encode ($ response); '. Это возвращает ** «HOME» **, когда я пишу ** HO **, так что он еще не работает :( – mailazs

+0

Я получил это! Спасибо !!! Если кто-то не знает, как это сделать ... в этом случае это: '$ i = 0, while ($ row = pg_fetch_array ($ result)) {$ response [] = $ row [ac_fin_g]; $ i ++;} echo json_encode ($ response);' В этой [ссылке] (http : //stackoverflow.com/questions/1830264/how-can-i-convert-the-result-of-this-postgres-db-query-into-json-to-return-to-my) есть еще один пример:) Спасибо за помощь людям!:) – mailazs

+0

@mzs_newbie: Добро пожаловать! – Oleg

0

В настоящее время вы перезаписать одно значение с другим. Просто замените это:

while($row = pg_fetch_array($result)) { 
    $response->input['value']=$row[ac_fin_g]; 
    $i++; 
} 

по

while($row = pg_fetch_array($result)) { 
    $response->input['value'][]=$row[ac_fin_g]; 
    $i++; 
} 
+0

Это не подходит для меня ... потому что это возвращает мне что-то вроде этого: '{" input ": {" value ": [" HOME "," HOUSE "]}}', например, и т.п. @Oleg сказал, мне нужно что-то вроде: '[{" label ":" Home "," value ":" HOME "}, {" label ":" House "," value ":" HOUSE "}]'. Но спасибо за ответ :) – mailazs