Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: AJAX: skandit parametririvillä

Sivun loppuun

B_R_H [28.10.2009 20:18:55]

#

Taas typeryyttäni kyselen, kun en en lukemattomuuttani ymmärrä miksi:

Mulla on ajax-kutsussa seuraava koodinpätkä, jossa parametrit ovat seuraavat:
param1 = kutsuttava palvelinskripti
param2 = get-metodille välitettävät parametri
param3 = paluuarvon käsittelevän funktio
param4 = ajetaanko syknronisena vai asynkkina
Käytettävät funktiot on kopsattu ohjelmointiputkan esimerkistä
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=ajax

Kasittele('paivita.php','kaveri=479&nimi=Ville Järvinen&h_t=h',tarkista,true);

Tämä koodi toimii ok ja se välittää parametrit palvelinskriptille ok.

Ongelma:
param2-muuttujassa oleva ä ei välity palvelimelle oikein. Palvelinskiptissä otan sen vastaan ja tulostan.

<?php
   echo $_POST['nimi'];
?>

Arvo näkyy kuitenkin seuraavasti.
Ville Järvinen

Merri [29.10.2009 10:57:43]

#

Tarjoile skriptisivu UTF-8:na niin ongelma katoaa. Ennen tulostusta siis vaikka header('text/plain; charset=utf-8'); jos tahdot vaan tekstitiedostodebuggia.

B_R_H [29.10.2009 11:12:33]

#

Tarkoititko tuonne palvelinskriptiin?

<?php
   header('text/plain; charset=utf-8');
   echo $_POST['nimi'];
?>

Jos noin, niin ei vaikutusta.

Merri [29.10.2009 11:45:28]

#

Hups, unohdin ajatuksissani content-type:n edestä :)

'content-type: text/plain; charset=utf-8'

B_R_H [29.10.2009 12:50:02]

#

Yeps olet oikeassa, hienosti toimii - kiitos!

Jatketaan pykälää pidemmälle. Kun samassa skriptissä yritetään hakea kannasta (Postgres) tuolla samalla arvolla osuvuutta, niin miten se pitäisi siellä saada toimimaan??

<?php
require('kanta.php');

header('content-type: text/plain; charset=utf-8');
echo $_POST['nimi']; // Tämä näyttää siis tiedon nyt oikein

if (isset($_POST['kaveri'])) {
   $upd = "update kaveri set id =";
   $upd .= pg_escape_string($_POST['kaveri'])." ";
   $upd .= "where nimi = '".pg_escape_string($_POST['nimi'])."';";
   // Ei löydä, jos nimi-kentässä on skandeja
   pg_query($db,$upd) or die('Pieleen meni');

}
?>

B_R_H [02.11.2009 09:33:29]

#

Painiskelin viikonloppuna useamman tunnin ilman tulosta tämän kanssa. Eikö kukaan osaa auttaa - please?

trilog [02.11.2009 09:55:42]

#

Teet haun kannasta siinä merkistössä, jota käytät siellä.

B_R_H [02.11.2009 10:14:46]

#

Mielestäni teen kyllä näin. Normaaleilla php-scripteillä lomaketta tehtäessä toimii ok, mutta ajax-kutsun kautta ei.

Metabolix [02.11.2009 11:35:19]

#

Lopputuloksesta kyllä nähdään, että mielipiteesi on väärä – jos tekisit haun oikeassa merkistössä, tuloksetkin olisivat oikeat.

B_R_H [02.11.2009 11:59:23]

#

Näin varmaankin, mutta kun en ymmärrä (ei yllätys), missä se menee pieleen.

vehkis91 [02.11.2009 12:25:36]

#

Jos olet tallentanut kantaan utf-8 muodossa dataa, niin sen kyselyn pitää kanssa olla utf-8 muodossa. Sama toimii kaikissa muissakin merkistökoodauksissa.

Lebe80 [02.11.2009 12:28:28]

#

ja kannattaa tarkistaa myös mitä merkistöä itse sivusto käyttää

B_R_H [02.11.2009 12:51:14]

#

Sivusto näyttää olevan iso-8859-1

Poistin turhia ongelmani yksinkertaistamiseksi

<?php
echo $_REQUEST['nimi'];
?>

Tämän kun ajaa suoralla selaimen osoitteella, niin paluuarvo on ihan oikein, myös skandien kohdalta.

Jos samaa php-tiedostoa kutsuu ajax:n kautta, niin skandien koodaus on väärin?

<?php
header('content-type: text/plain; charset=utf-8');
echo $_REQUEST['nimi'];
?>

Jos taas koodiin lisään tämän Merrin ehdotaman headerin, niin käy toisinpäin eli osoitamalla tiedostoa toimii väärin, mutta ajax toimii oikein.

Teuro [02.11.2009 13:20:44]

#

Sinulla on siis jostain syystä tiedostoja eri muodossa merkistöjen osalta. Muuta tuon ajax kutsun tekevän tiedoston merkistökoodaus vastaamaan muuta sivustoa.

B_R_H [02.11.2009 14:21:53]

#

Missä ihmeessä tuo voisi olla?
Kun katson sivua, josta tuo ajax-kutsu lähtee, sen headerissa on:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

Kutsuttavassa php-modulissa ei ole mitään määrittelyjä, paitsi jos lisään tuon

header('content-type: text/plain; charset=utf-8');

Tällä se näkyy oikein, mutta tällä seuraavalla ei

header('content-type: text/plain; charset=iso-8859-1');

Lebe80 [02.11.2009 14:31:11]

#

Sitten pitäisi taas palauttaa mieleen, että milläs merkistöllä se ajax taas käsittelikään lähetettyjä tietoja... ja mitä merkistöä kannattaisi aina käyttää ajaxin kanssa...

B_R_H [02.11.2009 15:44:18]

#

veikkaampa utf-8 :-)

Lebe80 [02.11.2009 16:35:24]

#

ja mikäs merkistö tällä sivulla olikaan käytössä?

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

Metabolix [02.11.2009 16:43:11]

#

Varmaankin olet myös tietokantaasi tallentanut datan iso-8859-1:nä, kun taas AJAXilta tulee UTF-8-tekstiä, jolla yrität sitten hakea. Varsinainen ongelmahan nyt on, että et ole ilmoittanut PostgreSQL:lle merkistöä (UNICODE tai LATIN1), jolla kyselyt tehdään.

B_R_H [03.11.2009 09:35:07]

#

Moro,

Metabolix kirjoitti:

Varmaankin olet myös tietokantaasi tallentanut datan iso-8859-1:nä, kun taas AJAXilta tulee UTF-8-tekstiä, jolla yrität sitten hakea. Varsinainen ongelmahan nyt on, että et ole ilmoittanut PostgreSQL:lle merkistöä, jolla kyselyt tehdään.

Kyllä! Olet oikeassa. Kantani on näköjään tehty:
Encoding = LATIN1
Locale = fi_FI

Kun kerron kannalle millä merkistöllä kysely tehdään, homma toimii ok.

pg_query($db, "set client_encoding to 'UTF8'") or die('Asetus ei luonnistu');
pg_query($db, $upd) or die('Pieleen meni');

Kiitos taas!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta