Angular $http.post nefunguje jak má
- emmil
- Člen | 26
Pokouším se zpracovat $http.post požadavek v presenteru, presenter ale nepříjmá post data, které jsou poslané pomocí angular $http.post.
<script>
var myData = { 'param1' : 'value' }
$http.post('?do=myMethod', myData).then(function(response) {
console.log(response)
}, function(error) {
console.error(error)
})
</script>
And presenter:
<?php
public function handleMyMethod()
{
// Set post params
$post = $this->httpRequest->getPost();
// Try to send the params back
$this->sendResponse( new Nette\Application\Responses\JsonResponse( $post, "application/json;charset=utf-8" ) );
$this->terminate();
}
?>
Vrací to prázdné pole.
Editoval emmil (27. 1. 2016 11:22)
- Pavel Kravčík
- Člen | 1195
Myslím si, že je ten příspěvek diskriminační. Zapomněl na slovenské publikum a to máme takový krásný tester. :(
Jinak zkoušel si ->getRawBody()
nebo
$_POST
?
- emmil
- Člen | 26
Za slovenské publikum se omlouvám, příště raději dám jeden jazyk :) Na základě tvé rady jsem $_POST zkusil, ale taky nic nevrátil. Zajímavé je, že třeba $http.get() a getQuery() funguje.
Zkusil jsem ->getRawBody() a vrátilo mi to string, který opravdu obsahoval data. Takže jsem udělal následující, což už funguje:
<?php
public function handleMyMethod()
{
// Set post params
$post = $this->httpRequest->getRawBody();
$post = json_decode($post);
// Try to send the params back
$this->sendResponse( new Nette\Application\Responses\JsonResponse( $post, "application/json;charset=utf-8" ) );
$this->terminate();
}
?>
Asi to bude tím ContentTypem, jak navrhuje @iguana007 v mém anglickém postu. Ještě ten ContentType vyzkouším.
Vidím, že dávat příspěvky ve dvou jazycích nebyl úplně dobrý nápad, chtělo by to mít na foru možnost, kde můžeš jedním příspěvkem napsat v podstatě dva, ve dvou jazycích, a tím každý příspěvek zpřístupnit i v angličtině.
- emmil
- Člen | 26
@newPOPE Ještě bych se rád zeptal na něco ohledně RestRoute. Možná je to úplně blbý dotaz, ale nemáš v to v README na githubu. Jak se vlastně napíše takový vnitřek action metody v presenteru, která má přečíst nějaké data poslané přes POST request? Máš tam hezky popsané, že params jsou třeba:
format = json
associations = array(0)
data = {„foo“: „bar“, „nested“: {„foo“: „bar“}}
query = array(0)
ale není tam napsané, jak se k těm params dostanu přímo v action metodě. Mohl by si tuto maličkost objasnit? Díky moc.
Editoval emmil (31. 1. 2016 21:17)
- newPOPE
- Člen | 648
@emmil sorry za delay som to prehliadol.
Tu je priklad POST requestu. Params su predane do action metody cize to funguje nejak takto:
public function actionCreate($format, $data) {
// tu su $data naplnene tym co je v popisane v params...
}
Funguje to tak, ze co si vymenujes s tych params v metode to tam bude predane.