Autor Zpráva
lionel messi
Profil
Zdravím všetkých webových nadšencov,

postupne začínam s AJAXom a mojím cieľom je odoslať dáta metódou POST na spracovanie PHP skriptu (metóde GET by som sa veľmi rád vyhol).

Môj problém je, že vychádzam z učebnice vydanej v roku 2006, ktorá počíta s použitím $HTTP_RAW_POST_DATA a direktívou always_populate_raw_post_data, teda záležitosťami, ktoré sú v PHP 7 pasé.

V spomínanej knihe sa uvádza, že dáta treba aj pomocou POST posielať prostredníctvom XMLHttpRequest vo formáte parameter1=hodnota&parameter2=hodnota, čoho sa aj držím. Následne k dátam v cieľovom PHP skripte pristupujem takto:

$obsah = file_get_contents("php://input");

Tu sa začína moje tápanie ako ďalej čo najlepšie a najefektívnejšie pristupovať k dátam, keďže učebnica ukazuje použitie $_POST, čo však kvôli absencii $HTTP_RAW_POST_DATA vypadáva z hry.

Samozrejme, viem si dáta rozsekať napr. pomocou explode a ďalej pracovať s výsledným poľom, ale nechce sa mi veriť, že neexistuje lepšie riešenie. Alebo mám dáta posielať v inom formáte? Na webe som našiel iba príklady s metódou GET alebo na strane JS s jQuery, ani jedno však nechcem použiť.

PS: Potrebujem, aby mi finálne riešenie zachovalo diakritiku (UTF-8).

Vopred ďakujem za každé nasmerovanie.
juriad_
Profil *
Posílej data jako JSON, jak JS, tak i PHP s tím umí dobře pracovat.
lionel messi
Profil
juriad:

Ďakujem, narážam však na problém, ako JSON spracovať v PHP, pretože json_encode sa skončí syntaktickou chybou. Ak si JSON nechám vypísať pomocou JS do konzoly prehliadača vyzerá takto:

Object { nazov: "Pokus", text: "Veľký pokus, ktorý nemá konca.\n\nEšte väčší pokus." }

V PHP potom pracujem takto, ale do premennej pole sa mi namiesto poľa uloží null:

$obsah = file_get_contents("php://input"); #var_dump($obsah) vráti [Object Object]
$pole = json_decode($obsah, TRUE); #var_dump($pole) vráti null

json_last_error_msg vráti „Syntax error“.

Ospravedlňujem sa, našiel som chybu, dopĺňam riešenie:

JSON vychádza síce syntakticky z objektov v JS, ale ide o reťazec. Čiže „takmer-objektový“ zápis
{"nazov":"Pokus","text":"Druhý pokus"}
treba obaliť ako reťazec
'{"nazov":"Pokus","text":"Druhý pokus"}'


Ešte raz ďakujem juriadovi.
juriad_
Profil *
V JS použij JSON.stringify() pro převod objektu na řetězec namísto vlastního řešení.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0