Ajax Snippety vše se odesílá, ale nic se nevrací
- Rudolf247
- Člen | 38
Zdravím, už jsem zoufalej, prošel jsem snad všechny vlákna kde se řeší snippety, ale můj problém to nevyřešilo. Prostě chci na základě změny jednoho selectu, změnit ten druhý. Mám toto:
V presenteru:
/**
* @param $brand
*/
public function handleFirstChange($brand)
{
if($brand){
$items = [1 => "Řada 5"];
$this['filterForm']['model']->setPrompt('Vyberte Model')
->setItems($items);
} else {
$this['filterForm']['model']->setPrompt('Nejdříve vyberte model')
->setItems([]);
}
$this->redrawControl('wrapper');
$this->redrawControl('modelSnippet');
}
protected function createComponentFilterForm(){
$form = new Form;
$form->addSelect('brand', NULL, [1 => "BMW"])->setPrompt('Značka');
$form->addSelect('model')->setPrompt('Nejdříve vyberte značku');
return $form;
}
Šablona:
{snippetArea wrapper}
<form n:name=filterForm action="" method="post" novalidate>
<div id="car-form">
<div class="form-group">
<select n:name=brand class="form-control">
<option value="" selected>Značka</option>
</select>
</div>
{snippet modelSnippet}
<div class="form-group">
<select n:name=model class="form-control">
</select>
</div>
{/snippet}
{include js}
</div>
</form>
{/snippetArea}
{define js}
{include jsCallback, input => brand, link => firstChange}
{/define}
{define jsCallback}
<script>
$('#' + {$control["filterForm"][$input]->htmlId}).on('change', function () {
$.nette.ajax({
url: {link {$link}!},
data: {'brand': $(this).val()},
type: 'get',
datatype: "json"
});
});
</script>
{/define}
Po výběru z prvního Selectu se pouze v konzoli vypíše: „XHR finished
loading: GET
"http://localhost/fajnauto/www/offer/cars?do=firstChange&brand=1“."
A tím to končí, netušíte někdo kde dělám chybu. Děkuji za
odpovědi
- iguana007
- Člen | 970
Dvě věci:
- Console je sice fajn, ale spíše se podívej do panelu Network, co se ti v té odpovědi vrátilo a hoď to sem
- Osobně by jsem radši použil nějaký dependent select addon, protože si myslím, že až dořešíš Ajax, tak budeš heště bojovat s validací atd. Zde máš dva addony, které toto řeší: https://github.com/…entselectbox + https://github.com/…entSelectBox Nasadíš to za pár minut a budeš ready třeba i na 3 vzájemně závislé selecty bez větších úprav kódu ;)
- Rudolf247
- Člen | 38
Dobře, v Network v záložce Preview mám tohle
{state: [], snippets: []}
snippets:[]
state:[]
Jinak NasExt DependentSelectBox jsem zkoušel a taky se mi nějak nechytal,
hlavně mi už z dokumentace nevyhovovala funkčnost.
Já tady v příkladu mám sice statické data, ale ve výsledku se mají data
tahat z databáze. Takže když jako značku vyberu Škodu, která bude mít
třeba value=„3“(id), tak se pošle do presenteru brand=3, kde bude dotaz do
databáze a vytáhne mi to z tabulky všechny zapsaný modely Škody. Což by
v tom NasExt asi nešlo, nebo jsem to jenom nepochopil. Kouknu na to druhé.
Děkuji.