posílání dat přes $.ajax do presenteru
- Onarr
- Člen | 10
Ahoj, mám následující kód:
jquery
$(".event").draggable({
stop: function( event, ui ) {
var childPos = $(".event").offset();
var parentPos =$("table").offset();
var yPos = childPos.top - parentPos.top;
var link = $('.container').data('update');
alert(yPos);
$.ajax({
type: 'POST',
url: link,
data: {
position: yPos,
id: this.id
}
});
}
});
Presenter
public function handleUpdate($position, $id){
$x = round($position/60+7);
$y = $position % 60;
$start = date("H:i:s",mktime($x,$y,0));
$data = array(
"start" => $start
);
$this->database->table("events")->where("id", $id)->update($data);
}
Ve zkratce co chci udělat. Dělám na kalendáři podobnému tomu googlovskému. Při posunutí objektu chci aby se updatovala databáze, bohužel se nic nestane a já netuším proč.
- iguana007
- Člen | 970
Onarr napsal(a):
Teď si uvědomuji, že handle pravděpodobně zpracovává jen komponenty že? Ve svém kódu je nevyužívám, což bude pravděpodobně ten problém co?
handleXYZ je jedna z casti zivotniho cyklu presenteru, takze se ti vykona pouze handle, render a beforeRender: https://doc.nette.org/…n/presenters#… a handle muzes klidne volat i tak, jak to volas ted, v tom bych problem asi nevidel … ale pokud mas nejaky kod v actionXYZ a ocekavas jeho vykonani behem ajax volani, tak se tak nestane a budes ho muset presunout do renderXYZ
- Jan Mikeš
- Člen | 771
iguana007 napsal(a):
Onarr napsal(a):
Teď si uvědomuji, že handle pravděpodobně zpracovává jen komponenty že? Ve svém kódu je nevyužívám, což bude pravděpodobně ten problém co?
handleXYZ je jedna z casti zivotniho cyklu presenteru, takze se ti vykona pouze handle, render a beforeRender: https://doc.nette.org/…n/presenters#… a handle muzes klidne volat i tak, jak to volas ted, v tom bych problem asi nevidel … ale pokud mas nejaky kod v actionXYZ a ocekavas jeho vykonani behem ajax volani, tak se tak nestane a budes ho muset presunout do renderXYZ
Tohle je imho spatna informace, proc by se pri ajax requestu melo vynechavat volani actionXYZ? provede se akorat jeste pred handlem.
- Onarr
- Člen | 10
Tak jsem otestoval, jestli se metoda zavolá, když odstraním parametry a v takovém případě funguje. Problém tedy je nejspíše v u nich. Jinak teda můj kód:
<?php
namespace App\Presenters;
use Nette;
use App\Model;
class HomepagePresenter extends BasePresenter
{
private $database;
private $events;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault()
{
$this->template->events = $this->database->table("events");
}
public function getPosition($val){
(int)$position = $val->h;
return ($position - 7) * 60;
}
public function getHeight($val){
if($val<30){
return 30;
}
else {
return $val;
}
}
public function handleUpdate($position, $id){
//$x = round($position/60+7);
//$y = $position % 60;
//$start = date("H:i:s",mktime($x,$y,0));
$data = array(
"length" => 75
);
$this->database->table("events")->where("id", $id)->update($data);
}
}
- Onarr
- Člen | 10
Další testy mi zjistily, že metoda se zavolá, ale proměnné parametrů jsou prázdné :-/
request se provede a vypíše 200
/projecter/www/?do=update&id=2
ale v metodě (kvuli testu jsem ji upravil) je předaná proměnná nulová
$.ajax({
type: 'GET',
data: {id: 2},
url: link
});
public function handleUpdate($id){
$data = array(
"length" => 90
);
$this->database->table("events")->where("id", $id)->update($data);
}
Editoval Onarr (28. 8. 2015 19:58)