2013-09-22 3 views
0

Typeahead.js을 내 사이트에 구현하려고합니다.JSON 형식의 MySQL SQL 결과를 반환

typeahead.js는, JSON을 반환 원격 페이지에서 같은
뭔가 걸릴 것입니다 :

$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.'" 
     }'; 
} 
: 내 사이트에 대한 http://example.org/search?q=%QUERY

를이 내가 PHP를 위해 쓴 한 것입니다

그러나 내가 그 형편없는 것을 돌려 줄 것을 요청할 때, 그것은 text/html로 돌아가고 application/json이 아닌 screenshot from Chrome browser으로 돌아 간다.

어떻게 작동합니까?

미리 감사

+0

또한 JSON에 익숙하지 않아서 JSA 구조가 TypeAhead의 작동에 올바른지 확신 할 수 없습니다 ...하지만 나중에 해결할 예정입니다. 이 스 니펫이 실행되지 않는 이유를 생각하십시오.) – potasmic

+0

클라이언트 응용 프로그램에서 설정 한 응답 유형이 아니며 서버에서 응답 형식으로 사용 했습니까? –

답변

2

에 당신은 Content-Type 헤더를 직접 설정할 수 있습니다. 출력이 전송되기 전에 header :

+0

감사! json 인코더를 사용하고 싶지 않기 때문에이 코드를 사용했습니다. – potasmic

+1

@KoiFish : 어, 둘 다 실제로 사용해야합니다. JSON 인코더의 문제점은 무엇입니까? 그것은 훨씬 더 안전 할 것입니다. 그리고 그대로 SQL 주입 문제도 있습니다. – Ryan

2

이것은 유효한 JSON이 아닙니다. 이름 주변에는 따옴표가 없습니다. PHP는 이미 json 인코딩/디코딩 함수를 내장하고 있으므로 직접 문자열을 작성할 필요가 없습니다. 당신은 또한 mysql_fetch_assoc을 사용할 수 있습니다

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

echo json_encode($row_set); 

:

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

시도 무언가를 사용합니다.

관련 문제