2015-02-11 55 views
3

我在此處懸掛乾燥。用戶點擊選擇列表上的一個選項,然後jQuery發送一個xhr到服務器進行處理,這裏沒什麼特別的,代碼完美地工作(firebug顯示正確的發佈數據)。json_encode不適用於PDO提取的數據

然後簡單代碼來從數據庫中,其中W_id == $val返回行,然後在$result擷取結果,然後回聲結果的JSON響應:

public function getCities($val) { 
    $sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id"); 
    $sth->execute(array(':w_id' => $val)); 
    $result = $sth->fetchAll(PDO::FETCH_ASSOC); 
    //print_r($result); 
    header("content-type:application/json"); 
    echo json_encode($result); 
} 

螢火蟲示出郵政數據,但沒有響應。但是,當我取消了print_r,它讓我看到一個數組作爲迴應:

Array(
    [0] => Array(
     [id] => 1401 
     [name] => Aïn Bouchekif 
    ) 

    [1] => Array(
     [id] => 1402 
     [name] => Aïn Deheb 
    ) 

    [2] => Array(
     [id] => 1403 
     [name] => Aïn El Hadid 
    ) and so on... 

這意味着有是可以返回的結果,但我不知道該怎麼jsonify他們。任何幫助表示讚賞,謝謝。

+0

它打印什麼,如果你跳過標題? – satchcoder 2015-02-11 18:18:45

+1

在'echo json_encode($ result)'echo'json_last_error()'後面' – 2015-02-11 18:20:49

+0

我想,這個問題在錯誤的頭文件中。嘗試完全檢查http請求/響應頭。 – 2015-02-11 18:25:50

回答

1

這裏是我工作: UTF-8 character encoding battles json_encode()

public function getCities($val) { 
    $sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id"); 
    $sth->execute(array(':w_id' => $val)); 

    header("Content-type: application/json; charset=utf-8"); 

    $rows = array(); 

    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
     $rows[] = array_map('utf8_encode', $row); 
    } 

    echo json_encode($rows); 
} 

我發現對方的回答這裏How to json_encode array with french accents?但狀態越來越通知,非法字符找到。

1

我認爲這是一個編碼問題,你可以使用json_last_error()來驗證這個想法。您可以添加到charset=utf-8頭:

$result = $sth->fetchAll(PDO::FETCH_ASSOC); 
//print_r($result); 
header("Content-type: application/json; charset=utf-8"); // <-- Here 
echo json_encode($result); 
echo json_last_error(); // <-- Here 
+0

With echo json_last_error();成功的方法被激發了,我有5作爲一個響應。手冊說它是格式錯誤的UTF-8字符,可能編碼不正確,我想這是因爲ï – hiddeneyes02 2015-02-11 18:44:12