Při ajaxu se pošle odpověď a zbytek stránky
- wise
- Člen | 161
Zdravím,
do dneška mi všechno jako jak má, ale najednou se mu nechce.
Na stránce mám select s kraji, po změně kraje, se pošle GET požadavek a jako odpověď mi přijde seznam měst v daném kraji.
JS
<?php
$(".countrySelect").change(function() {
var country = $(".countrySelect").val();
$.get("?do=loadCities", {"value": country}, function (payload) {
......
?>
HANDLE
<?php
public function handleLoadCities($value) {
....
echo '{"select": "'. $this->pom .'"}';
// popř. echo json_encode($this->pom);
?>
Takto mi to vše do dneška fungovalo jak má.
Ale nyní se vrací odpověď ve formátu:
POŽADOVANÁ ODPOVĚĎ + </pre></xmp></table><!DOCTYPE HTML ..... + Cannot send header after HTTP headers have been sent (a označuje řádek výše, právě s tím echo)
Zkoušel jsem přidat za echo $this->sendPayload(); nebo jsem našel nějaký BOM a přidal ho do startup() metody BasePresenteru, ale bohužel, pořád žádná změna.
Nevíte? Děkuji mnohokrát.
Nette 0.9.6 PHP 5.2
- bojovyletoun
- Člen | 667
- za prvé bych místo
"?do=loadCities"
psal"loadCities!"
. - to, že v handle napíšeš echo něco, způsobí, že se ti na začátek
stránky( tedy ještě před
<html>
) vypíše něco a pak se k tomu přidá celá stránka - zkusil bych
this->payload="...";this->sendPayload()
- ale je mi záhadou, jak to mohlo fungovat – posílal se opravdu jen JSON?
Editoval bojovyletoun (16. 1. 2011 13:26)
- wise
- Člen | 161
No právě že fungovalo. Proto jsem pokračoval dál, dokončil modul a poté mi tester řekl, že to nefunguje.
Tak jsem to upravil na:
<?php
$this->payload = json_encode($this->pom); // také: $this->payload = $this->pom;
$this->sendPayload();
?>
Ale hází mi to chybu Cannot assign to a read-only property Presenter::$payload.
A místo ?do=loadCities nemůžu dát loadCities!, jelikož to nemám jako klasický odkaz, ale ajax get požadavek, jak je výše a to se handle vůbec neprovede.
- wise
- Člen | 161
Ještě teda možná jedna pomocná věc. Vypíše mi to JSON, potom
</pre></xmp></table>
což absolutně nevím, kde se to vzalo, nikde v souborech to není a potom zbytek stránky, ale to je laděnka a to Cannot send header after HTTP headers have been sent. Což jsem vlastně psal ale výše :/
- wise
- Člen | 161
Popř. se nebráním tomu, jestli byste mi nenaznačili, jak udělat v nette jiným způsobem následující:
Mám formulář, klasicky jako továrničku.
V něm mám také 2 selecty.
Při změně jednoho si nahraju potřebné hodnoty (option)
a změním hodnoty v druhém selectboxu.
Momentálně to řeším tak, že jeden smažu a na jeho místo kompletně nahraju druhý.
Děkuji mnohokrát.
- wise
- Člen | 161
newPOPE napsal(a):
vzdy som pouzival
<?php $this->payload->foo = $foo; //anything $this->sendPayload(); ?>
cize ziadne json_encode(…) ani
echo $this->payload
to nette robi samo…neviem (asi som divny :-D) ale nie je mi jasne co presne potrebujes?.
- lieta ti zo servera AJAXom divny vystup?
No chlape, nejsi divny, je to přesně to, co jsem potřeboval :)
Předtím mi radili použití $this->payload = $foo, ale to co jsi poslal ty, to je přesně ono :)
Takže problém vyřešen, snad to někomu pomůže v budoucnu.
Děkuji mnohokrát.