Ajax – ako zavolat metodu handleNieco cez javascript ?

#1 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Ajax – ako zavolat metodu handleNieco cez javascript ?

majme metodu

<?php
protected $pom;

public function handleinsert($pomocna)
{
$this->template->pom = $pomocna;
}
?>

kde handle je nakonfigurovany v BasePresentery

chcem zavolat na udalost onChange selectboxu call handler

skusala som uz vselico

<script>
$("#blabla").live("change", function() {

        // tu mam zavolat

        $.get(..blabla..);
        alert({$pom});
        return false;
} );
</script>

poradte nieco dik

 

#2 před 11 měsíci

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

Ahoj, chápu to správně, že chceš po změně selectboxu dostat do javascriptu proměnnou {$pom} ? Stačilo by to takhle?

public function handleInsert()
{
    echo 'obsah proměnné $pom';
    $this->terminate();
}
<script>
$("#blabla").live("change", function() {
        $.get({link insert!}, function(data){
            alert(data);
        });
        return false;
} );
</script>

Editoval xxxObiWan (10. 6. 2011 17:44)


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#3 před 11 měsíci

Mikulas Dite
Nette guru
Registrovaný: 18. 11. 2009
Příspěvky: 803

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

Tak, nebo čistěji spíš

public function handleInsert($temp)
{
        $this->sendResponse(Nette\Application\Responses\JsonResponse(array('temp' => $temp)));
}
$.get({link insert!, 'temp' => 'nejaka hodnota'}, function(response) {
        alert(response.temp);
});

Editoval Mikulas Dite (10. 6. 2011 17:48)

 

#4 před 11 měsíci

uestla
Nette guru
Registrovaný: 21. 8. 2009
Příspěvky: 438

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

Tak, nebo čistěji spíš

protected $pom;

public function handleInsert()
{
        $this->payload->pom = $this->pom;
        $this->sendPayload();
}
<script>
$.get({link insert!}, function(payload) {
        alert(payload.pom);
});
</script>

 

#5 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

zmeni sa vlastne hodnota pom ?

ked ju chcem vlozit do templatu ? do remennej $pom ?
ked to zavolam ok vojde dnu ale nenastavi tu premennu do pom .. iba ak vypisem alert (payload.pom)

ale premenna $pom je stale rovnaka ked ju vypisem alert({$pom})

uestla napsal(a):

Tak, nebo čistěji spíš

protected $pom;

public function handleInsert()
{
      $this->payload->pom = $this->pom;
      $this->sendPayload();
}
<script>
$.get({link insert!}, function(payload) {
        alert(payload.pom);
});
</script>

 

#6 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

ja skor potrebujem do premenne pom nieco vlozit a potom s nou pracovat na stranke

xxxObiWan napsal(a):

Ahoj, chápu to správně, že chceš po změně selectboxu dostat do javascriptu proměnnou {$pom} ? Stačilo by to takhle?

public function handleInsert()
{
    echo 'obsah proměnné $pom';
    $this->terminate();
}
<script>
$("#blabla").live("change", function() {
        $.get({link insert!}, function(data){
            alert(data);
        });
        return false;
} );
</script>

 

#7 před 11 měsíci

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

maria288 napsal(a):

ja skor potrebujem do premenne pom nieco vlozit a potom s nou pracovat na stranke

To můžeš, ale protože ji získáš přes AJAX, dostaneš ji do proměnné pom jen v javascriptu. PHP proměnné už jsou v té době dávno vykreslené → HTML stránku tak můžeš měnit jen přes javascript.

Možná chceš něco takového?

<script>
        $.get({link insert!}, function(data){
            $('#selectMessage').html(data);  //do divu s id="selectMessage" vloží získané data (např. zprávu "tento prvek si vybrat nemůžeš :-P")
        });
</script>

Dokud neřekneš, na co to konkrétně potřebuješ, asi ti nikdo víc neporadí.


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#8 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

jasne na zaklade toho co si vyberiem z comba, poslem vybrane id cez handler a nastavim nejaku premennu … a potom cez snippet zavolam invalidate snippet a zmenim vybrane veci do druheho comba

xxxObiWan napsal(a):

maria288 napsal(a):

ja skor potrebujem do premenne pom nieco vlozit a potom s nou pracovat na stranke

To můžeš, ale protože ji získáš přes AJAX, dostaneš ji do proměnné pom jen v javascriptu. PHP proměnné už jsou v té době dávno vykreslené → HTML stránku tak můžeš měnit jen přes javascript.

Možná chceš něco takového?

<script>
        $.get({link insert!}, function(data){
            $('#selectMessage').html(data);  //do divu s id="selectMessage" vloží získané data (např. zprávu "tento prvek si vybrat nemůžeš :-P")
        });
</script>

Dokud neřekneš, na co to konkrétně potřebuješ, asi ti nikdo víc neporadí.

 

#9 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

mám pocit, že jí jde spíš o snippety:

...
$("#blabla").live("change", function(e) {
        $.get({link insert!};
        e.preventDefault();
});
...
...
public function handleInsert()
{
        $this->value = 'new value';
        $this->invalidateConotrol('div');
}
...
public function renderDefault()
{
        $this->template->value = $this->value;
}
...
{snippet div}
{$value}
{/snippet}
...

edit: nezapomeň si nalinkovat jquery.nette.js s doplňků…

Editoval 22 (11. 6. 2011 14:21)

 

#10 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

<?php
   public function renderDefault()
        {
              $this->template->krajeid =  $this->krajeid;
               var_dump((object)$this->krajeid);exit;
        }

  public function handleSelectedKraj($id)
        {
          $this->krajeid =(object)$this->baseModel->getKraje($id);
          $this->invalidateConotrol('selectKraj');
          $this->sendPayload();

        }

 {snippet selectKraj}
    <select name="reg_kraj" id="reg_kraj">
    <option value="0">
      &nbsp;
      </option>
      {if isset($krajeid)}
      {foreach $krajeid as $kraj}
        <option value="{$kraj->id}">
      {$kraj->nazov}
      </option>
      {/foreach}
      {/if}
    </select>
    {/snippet}
?>

<script>
$(document).ready(function() {
$(‚#reg_stat‘).live(‚change‘,function(e) {
$.get({link SelectedKraj!, ‚id‘ ⇒ 1});
e.preventDefault();
alert({$krajeid})
} );
} );
</script>

22 napsal(a):

mám pocit, že jí jde spíš o snippety:

...
$("#blabla").live("change", function(e) {
        $.get({link insert!};
        e.preventDefault();
});
...
...
public function handleInsert()
{
      $this->value = 'new value';
      $this->invalidateConotrol('div');
}
...
public function renderDefault()
{
      $this->template->value = $this->value;
}
...
{snippet div}
{$value}
{/snippet}
...

edit: nezapomeň si nalinkovat jquery.nette.js s doplňků…

 

#11 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

nefunguje mi to ani s tymto .. netusim preco sa combo neprerenderuje

 

#12 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

protože sendPayload() ukončí presenter.. ale takhle bych to asi neřešil a navíc už je na to tu komponenta http://addons.nette.org/…entselectbox

 

#13 před 11 měsíci

nanuqcz
Nette guru
Registrovaný: 4. 5. 2010
Příspěvky: 615

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

Zakomentuj (odstraň) řádek

$this->sendPayload();

Tím ho odesíláš, ještě než se do $this->payload stačí uložit obsahy invalidovaných snippetů. Neboj se, Nette pak ten payload odešle za tebe automaticky.


starý nick: xxxObiWan | G+, FB, Twitter, Github | portfolio

 

#14 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

myslela som toto nejak nefunguje neprekresli sa mi snippet .. asi tam bude niekde chyba

<?php
        public function handleSelectedKraj($id)
        {
                $this->krajeid =(object)$this->baseModel->getKraje($id);
                $this->invalidateConotrol(‚selectKraj‘);
        }

?>

 

#15 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

viete mi dat jednoduchy priklad na snippet … mne tu nic v tom nette nefunguje uz som zufala dik

 

#16 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

tohle nestačí? akorat si v šabloně udělej nějaký odkaz místo toho slectboxu a uprav jQuery volání a mělo by to fungovat..

Editoval 22 (11. 6. 2011 20:12)

 

#17 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

skusam nejde .. tak netusim kde je chyba .. :(

22 napsal(a):

tohle nestačí? akorat si v šabloně udělej nějaký odkaz místo toho slectboxu a uprav jQuery volání a mělo by to fungovat..

 

#18 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

podívej se ve Firebugu, jestli probíha nějaký XHR požadavek.., pošli sem presenter a šablonu. nette.jquery.js máš zalinkované?

 

#19 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

musi to byt v bloku ?

{block content}
<a id=„blabla“ >aaaaaaaaa</a>
{snippet div}
{$value}
{/snippet}
{/block}

 

#20 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

mam nalinkovane, ziadna chyba nie je

22 napsal(a):

podívej se ve Firebugu, jestli probíha nějaký XHR požadavek.., pošli sem presenter a šablonu. nette.jquery.js máš zalinkované?

 

#21 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

no jistě, že to musí být v bloku a co ten požadavek?

Editoval 22 (11. 6. 2011 21:00)

 

#22 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

no jop ale aj tak hlasi chybu :

Fatal error: Uncaught exception ‚DibiDriverException‘ with message ‚Unknown column 'preklad_insert!‘ in ‚field list'' in C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php:856 Stack trace: #0 C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php(214): DibiMySqlDriver->query(‘?? …‚) #1 C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php(200): DibiConnection->nativeQuery(‘?? …‚) #2 C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php(754): DibiConnection->query(Array) #3 C:\xampp\htdocs\realvea_sk\app\models\BaseModel.php(189): dibi::fetchPairs(‘?? …‚) #4 C:\xampp\htdocs\realvea_sk\app\presenters\BasePresenter.php(118): BaseModel::getTranslations('insert!‘) #5 C:\xampp\htdocs\realvea_sk\libs\Nette\nette.min.php(1646): BasePresenter->startup() #6 C:\xampp\htdocs\realvea_sk\libs\Nette\nette.min.php(802): NPresenter->run(Object(NPresenterRequest)) #7 C:\xampp\htdocs\realvea_sk\app\bootstrap.php(53): NApplication->run() #8 C:\xampp\htdocs\realvea_sk\index.php(31): require(‚C:\xampp\htdocs…‘) #9 in C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php on line 856

 

#23 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

ja ani neviem co ti poslat, je to komplet projekt a .. mam pocit ze v nom niekde je chyba a asi si to treba vysusat na cistom projekte

22 napsal(a):

no jistě, že to musí být v bloku a co ten požadavek?

 

#24 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

a ano je tam poziadavok get

 

#25 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

aj na cistom projekte to padne na
Nette\Application\BadRequestException #404

 

#26 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

no ale ta chyba je z MySQL (neexistující sloupec preklad_insert!), takže buď máš chbu v nějakém MySQL dotazu, napřed prosím ověř funkci bez AJAXu a až pak přidej AJAX.

Edit: tak ze všeho nejdřív ti to ale musí fungovat aspoň první načtení presenter+šablona :-)

Editoval 22 (11. 6. 2011 21:16)

 

#27 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

no ten poziadavok je

GET
500
Internal Server Error

22 napsal(a):

no ale ta chyba je z MySQL (neexistující sloupec preklad_insert!), takže buď máš chbu v nějakém MySQL dotazu, napřed prosím ověř funkci bez AJAXu a až pak přidej AJAX.

Edit: tak ze všeho nejdřív ti to ale musí fungovat aspoň první načtení presenter+šablona :-)

 

#28 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

těžko říct, už jsem psal, aby jsi poslala presenter a šablonu, z tohodle se nic nepozná. Napřed musíš zajistit fungovaní toho MySQL dotazu nebo ho vyhoď, ať ti nekomplikuje život prozatím..

Editoval 22 (11. 6. 2011 21:24)

 

#29 před 11 měsíci

maria288
Člen
Registrovaný: 6. 6. 2011
Příspěvky: 43

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

layout

<!DOCTYPE html>
<html>
<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

        <meta name="description" content="Nette Framework web application skeleton">
        <meta name="robots" content="{$robots}" n:ifset="$robots">

        <title>Nette Application Skeleton</title>

        <link rel="stylesheet" media="screen,projection,tv" href="{$basePath}/css/screen.css" type="text/css">
        <link rel="stylesheet" media="print" href="{$basePath}/css/print.css" type="text/css">
        <link rel="shortcut icon" href="{$basePath}/favicon.ico" type="image/x-icon">

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
        <script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>

        <script type="text/javascript">
                $("a.ajax").live("click", function (event) {
                        event.preventDefault();
                        $.get(this.href);
                });
        </script>
</head>

<body>
        {foreach $flashes as $flash}<div class="flash {$flash->type}">{$flash->message}</div>{/foreach}

        @{include #content}
</body>
</html>

homePage.phtml

@{block content}
    <a class="ajax" href="{link Insert!}">aaaaaaaaa</a>
    {snippet div}
{$value}
{/snippet}
<div id="wrapper">

</div>

presenter Homepage

<?php

/**
 * My Application
 *
 * @copyright  Copyright (c) 2010 John Doe
 * @package    MyApplication
 */



class HomepagePresenter extends BasePresenter
{
 public $value = "any value";
   public function handleInsert()
{
        $this->value = 'new value';
        $this->invalidateConotrol('div');
}
        public function renderDefault()
        {
                  $this->template->value = $this->value;
        }

        public function handleLoadItems($id)
        {
                static $items = array(
                        'fruits' => array(
                                'Pear',
                                'Apple',
                                'Melon',
                                'Banana',
                        ),
                        'vegetables' => array(
                                'Salad',
                                'Garlic',
                                'Onion',
                                'Carrot',
                        ),
                );

                if(isset($items[$id]))
                        $this->template->items = $items[$id];
                // else: Don't fill in anything

                $this->invalidateControl('ajaxDemo');
        }
}

a vypisuje GET http://localhost:8080/…cument_root/?… 500 (Internal Server Error)

Editoval maria288 (11. 6. 2011 21:33)

 

#30 před 11 měsíci

22
Nette guru
Registrovaný: 18. 1. 2010
Příspěvky: 1424

Re: Ajax – ako zavolat metodu handleNieco cez javascript ?

kterou verzi Nette používáš? Jestli 2, tak zavináče už tam nepatří.
Handler se volá s malým písmenem {link insert!}

 

Zápatí