Oznámení
Ajax problem s predavani parametru payload = ->fetchAll()
před 9 lety
- wolker
- Člen | 4
Nette Framework 1.0-dev (revision a723be7 released on 2010–09–20) a dibi te verze
Mam problem s predavanim object DibiRow do
$this->payload->autoComplete
Respektive mam dva drivery a database.
Mysql (driver mysqli) a IBM DB/2 (driver odbc).
Pro mysql mi to funguje, ale pro db2 ani za mak a skonci to chybou 500 asi pri transformaci do JSON.
Pritom pri debagu ty hodnoty z modelu vypadnout, ale presto to upadne na 500.
Kdyz zadam pole rucne: array(‚surname‘=>‚SURNAME‘,‚name‘=>‚NAME‘); tak to funguje.
kdyz je predam pres smycku
foreach ($rows as $n => $row) {
$autoComplete[] = array('surname'=>$row['SURNAME'], 'name'=>$row['NAME'],
'akc'=>$row['AKC'], 'csp'=>$row['CSP'], 'orgj'=>$row['ORGJ'], 'skup'=>$row['skup']);
}
$this->payload->autoComplete = $autoComplete;
pole vidim spravne ale zase konci na 500.
Kody jsou zde: (pro mysql se musi vyhodit FETCH FIRST 10 ROWS ONLY a nahradit to limit 10)
public function handleAutoComplete($name){
if ($name != '') {
$this->payload->autoComplete = array();
$person = new Personal;
$this->payload->autoComplete = $person->findAutoComplete($name)->fetchAll();
}
$this->terminate();
}
public function findAutoComplete($id){
return $this->connection->query("select rtrim(DW06_PRIJMENI) as surname,
C_CPRAC as csp, rtrim(DW06_JMENO) as name,C_AS as akc, rtrim(DW06_ORGJ) as orgj, DW06_SKUP as skup
from ".$this->table." WHERE lcase(DW06_PRIJMENI) like lcase('". $id ."%') or
DW06_PRIJMENI like '". $id ."%' ORDER BY DW06_PRIJMENI, DW06_JMENO FETCH FIRST 10 ROWS ONLY ");
}
Editoval wolker (7. 10. 2010 11:50)
před 9 lety
- wolker
- Člen | 4
Tak po opětovném laborování jsem na tem problém přišel.
Při předání pole hodnot do $this->payload (asi transformaci do JSON) dojde k systémové vyjímce (server vrátí jen code 500), v připadě, že pole obsahuje české znaky konkrétně kodování WIN1250.
Prostředí je v UTF, DB/2 databáze (použitý system ODBC driver) umí jen kódování WIN1250.
Pokud provedu překódování array pole hodnot před předáním do $this->payload do ASCII nebo UTF, heuréka funguje to bez problému :D
V případě mysql ten problém nebyl, jelikož data už byla v kódování UTF.
Pokud by mi někdo znalejší, vysvětlil důvod této záludnosti, budu zase chytřejší.
před 9 lety
- David Grudl
- Nette Core | 6806
No jasně, JSON pracuje pouze s UTF-8. Nicméně to není systémová výjimka, měla by vyskočit obyčejná výjimka JsonEncode s patřičným vysvětlením.