ajax payload message vrati null
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- MKI-Miro
- Člen | 277
Ahojte
mam taketo kody
$(".addtocart-button").click(function(){
$.ajax({
url: "/online/buy",
dataType: 'JSON',
data: "{\"json\": \"John\"}",
success:function(payload) {
window.console && console.log(payload); //VRACIA NULL
window.console && console.log(payload.message);
},
error: function (xhr, ajaxOptions, thrownError) {
window.console && console.log(xhr.responseText);
window.console && console.log(thrownError);
}
});
});
a
public function renderBuy($json)
{
if ($this->isAjax()) {
$this->payload->message = '{"firstName": "John"}';
}
}
avsak payload mi stale vrati null
neviete prosim co robim zle ?
dakujem
- Majkl578
- Moderator | 1364
Na AJAX v Nette oporučuji používat nette.ajax.js. Nebudeš pak muset psát takto ošklivý kód, ve kterém jsou tak jako tak chyby:
- Nepoužívej URL psanou ručně, generuj ji přes makro {link}.
- Data neuváděj jako string, je to prasárna, uváděj standardní objekt.
- Payload neuváděj jako string, je to ještě větší prasárna, použij pole nebo stdClass.
- Nepředávej JSON jako string přes GET parametr do render metody!!!
V nette.ajax.js by tvoje vypadalo zhruba takto:
$('.addtocart-button').click(function () {
$.nette.ajax({
url: {link Online:buy},
type: 'POST',
data: {
name: "John"
},
success: function (payload) {
console.log(payload.message.firstName);
}
});
});
public function renderBuy($name)
{
if ($this->isAjax()) {
$this->payload->message = (object) array(
'firstName' => $name,
);
$this->sendPayload();
}
}
- MKI-Miro
- Člen | 277
dakujem za opravu
do renderBuy som pridal aj
$this->invalidateControl('cart');
a do layout.latte
{snippet cart}
<table>
{if $cart}
{foreach $cart as $item}
<tr>
<td><a href="#" class="removefromcart-button" name="{$item->id}">x</a></td>
<td>{$item->name}</td>
<td>{$item->price}</td>
</tr>
{/foreach}
{/if}
</table>
{/snippet}
ale nijako to neprekresluje nic na stranke, pritom ak dam refresh stranky tak uz sa zobrazia nove hodnoty
co robim zle ?
dakujem