problém s ajaxem, prosím o radu :-)
- wise
- Člen | 161
Zdravím,
na nové verzi (PHP 5.3 nette 2) se snažím rozchodit ajax a nevím jak na to. Děkuji prosím za pomoc.
jquery.nette.js (je to tedy takový myšmaš prosím o odkázaní na pravý obsah souboru jquery.nette.js
<?php
/**
* AJAX Nette Framwork plugin for jQuery
*
* @copyright Copyright (c) 2009, 2010 Jan Marek
* @copyright Copyright (c) 2009, 2010 David Grudl
* @license MIT
* @link https://componette.org/search/?q=jquery-ajax
*/
/*
if (typeof jQuery != 'function') {
alert('jQuery was not loaded');
}
*/
jQuery.fn.extend({
ajaxSubmit: function (callback) {
var form;
var sendValues = {};
// submit button
if (this.is(":submit")) {
form = this.parents("form");
sendValues[this.attr("name")] = this.val() || "";
// form
} else if (this.is("form")) {
form = this;
// invalid element, do nothing
} else {
return null;
}
// validation
if (form.get(0).onsubmit && !form.get(0).onsubmit()) return null;
// get values
var values = form.serializeArray();
for (var i = 0; i < values.length; i++) {
var name = values[i].name;
// multi
if (name in sendValues) {
var val = sendValues[name];
if (!(val instanceof Array)) {
val = [val];
}
val.push(values[i].value);
sendValues[name] = val;
} else {
sendValues[name] = values[i].value;
}
}
// send ajax request
var ajaxOptions = {
url: form.attr("action"),
data: sendValues,
type: form.attr("method") || "get"
};
if (callback) {
ajaxOptions.success = callback;
}
return jQuery.ajax(ajaxOptions);
}
});
(function($) {
$.nette = {
success: function(payload)
{
// redirect
if (payload.redirect) {
window.location.href = payload.redirect;
return;
}
// state
if (payload.state) {
$.nette.state = payload.state;
}
// snippets
if (payload.snippets) {
for (var i in payload.snippets) {
$.nette.updateSnippet(i, payload.snippets[i]);
}
}
},
updateSnippet: function(id, html)
{
$('#' + id).html(html);
},
// create animated spinner
createSpinner: function(id)
{
return this.spinner = $('<div></div>').attr('id', id ? id : 'ajax-spinner').ajaxStart(function() {
$(this).show();
}).ajaxStop(function() {
$(this).hide().css({
position: 'fixed',
left: '50%',
top: '50%'
});
}).appendTo('body').hide();
},
// current page state
state: null,
// spinner element
spinner: null
};
})(jQuery);
jQuery(function($) {
$.ajaxSetup({
success: $.nette.success,
dataType: 'json'
});
$.nette.createSpinner();
// apply AJAX unobtrusive way
$('a.ajax').live('click', function(event) {
event.preventDefault();
if ($.active) return;
$.post(this.href, $.nette.success);
$.nette.spinner.css({
position: 'absolute',
left: event.pageX,
top: event.pageY
});
});
// odeslání na formulářích
$("form").submit(function () {
$(this).ajaxSubmit();
return false;
});
// odeslání pomocí tlačítek
$("form :submit").click(function () {
$(this).ajaxSubmit();
return false;
});
});
?>
Jde mi o toto, ve startup():
<?php
$this->template->testov = "aa";
?>
Presenter:
<?php
public function handleAkce() {
$this->template->testov = "bleeee";
$this->invalidateControl("test");
}
?>
Template:
<?php
<a href="{link akce!}" class="ajax">zkus</a>
{snippet test}
{$testov}
{/snippet}
?>
Jako response dostanu: {„state“:[]}
Nevíte kde je problém? Děkuji moc.
Editoval wise (6. 2. 2011 21:48)
- bojovyletoun
- Člen | 667
Nevím, kde je problém, ale já jsem si tvůj kód zkopíroval do nového
presenteru a funguje to OK.
Response: {"state":[],"snippets":{"snippet--test":" bleeee"}}
.
Můžeš se podívat na screencasst
Nevím kde může být chyba.
Zde je můj výtvor:
<?php
use Nette\Application\Presenter;
class TestAjaxPresenter extends Presenter{
protected function startup(){
parent::startup();
$this->template->testov = "aa";
}
public function handleAkce(){
$this->template->testov = "bleeee";
$this->invalidateControl("test");
}
}
{extends none}
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
</head>
<body>
snipet{snippet test} {$testov}{/snippet},<a href="{link akce!}" class="ajax">zkus</a>
- bojovyletoun
- Člen | 667
Moc nerozumím dotazu. Jak se problém projevil? Co bylo obsahem
‚nějakého souboru‘ a ‚definice html‘
šlo problém poznat ze zdrojáku (prázdné místo?)?
https://latte.nette.org/cs/tags
https://doc.nette.org/…n/presenters#…