Zjištění, zda-li je uživatelské jméno volné – AJAX
- sd
- Člen | 87
Dobrý den,
mám takový problém. Potřebuji ve formuláři ověřovat, zda-li je uživatelské jméno volné ještě před tím, než uživatel formulář odešle (→ tj. potřebuji Ajax)
Mám v presenteru nastavený atribut onblur na JS funkci checkAviability(). Používám jQuery
...
->setAttribute('onblur', 'checkAviability()');
<script>
function checkAviability(){
$.get({link check!}, {'value': $( 'input:text[name=username]' ).val()});
}
</script>
V presenteru mám funkci handleCheck(), kde jsem zatím zkoušel alespoň vypsat hodnotu inputu username (zkoušel jsem jak flash message (ty mám také ve snippetu – snippet flashes), tak i jen vypsat do těla stránky (snippet test)
function handleCheck($value){
$this->flashMessage($value);
$this->template->testVar = $value;
$this->redrawControl('test');
$this->redrawControl('flashes');
}
A v latte šabloně
{snippet test}
{$testVar}
{/snippet}
{control addForm}
Když si udělám snippet na formuláři a ten pak znouvu vykreslím, tak se formulář, vymaže, takže Ajax funguje. Ale to, co mám výše ani ťuk. Už fakt nevím, co s tím :/.
Děkuji, sd
- Jan Endel
- Člen | 1016
todle bych osobně řešil spíše payloadem:
public function handleCheckUsername($username)
{
$this->payload->isFree = $this->users->isUsernameFree($username);
$this->sendPayload();
}
<form n:name="addForm" data-check-url="{link checkUsername!}" id="addForm">
<input n:name="username" id="username"><span id="isFree"></span>
</form>
$.('#addForm').on('blur', '#username', function (e) {
var $form = this;
var $input = $.('#username');
$.nette.ajax({
type: 'post',
url: $form.data('check-url'),
data: {
'username': ($input.val())
},
success: function (payload) {
$text = (payload.isFree) ? 'volné' : 'zabrané';
$.('#isFree').setInnerText($text);
}
})
takhle nějak přibližně.
Editoval Jan Endel (8. 1. 2015 14:54)
- sd
- Člen | 87
Děkuji moc za odpověď :). Po malých úpravách se mi to podařilo
částečně rozchodit. Vše je zdánlivě ok, žádná chyba v konzoli
FireBugu se nevyskytuje,
ale když chci vypsat hodnotu payload.isFree, tak je
undefined.
``
Předtím mi házel Error 500 – Internal server error, prý nemohl nalézt
šablonu checkUsername.latte, tak jsem ji prázdnou vytvořil a rozjelo
se to. Je to asi prasárna ale jinak to vůbec nejede :/.
``
jQuery + Nette Ajax
addon v1.2.2
JS: (main.js) //Tady jsem nahradil $ za var, dodal jsem úvozovky k
‚zabrané‘ atd..
$("#username").on('blur', function(){
var form = this;
var input = $('#username');
$.nette.ajax({
type: 'post',
url: $('#addForm').data('check-url'),
data: {
'username': (input.val())
},
success: function (payload) {
var text = (payload.isFree) ? 'volné' : 'zabrané';
$('#isFree').text(text);
}
})
});
Kód v presenteru:
public function handleCheckUsername($username)
{
$this->payload->isFree = TRUE; //True jsem tady zkoušel, jestli vůbec něco v tom JS vytáhnu z toho paloadu, a nevytáhl jsem ani to TRUE :/, pouze undefined. Zkoušel jsem si vyhodit alert okno s payload.isFree.
$this->sendPayload();
}
Neví někdo prosím, co je za problém že hodnota payload.isFree je
undefined?
Děkuji, sd
Editoval sd (8. 1. 2015 12:06)