Cros policy error při ajaxu
- Lukas99
- Člen | 8
Dobrý den,
snažím se ajaxem spustit funkci v presenteru ale dostávám error „Access
to XMLHttpRequest at ‚basepresenter:handleMyAjaxRequest‘ from origin
‚http://dev.myproject.cz‘ has been blocked by CORS policy: Cross origin
requests are only supported for protocol schemes: http, data, isolated-app,
chrome-extension, chrome, https, chrome-untrusted.“
PHP
<?php declare(strict_types=1);
namespace App\Presenters;
use Nette;
class BasePresenter extends Nette\Application\UI\Presenter
{
/**
* @ajax
*/
public function handleMyAjaxRequest()
{
}
}
JS
$.ajax({
url: 'BasePresenter:handleMyAjaxRequest',
type: 'POST',
});
Děkuji
- m.brecher
- Generous Backer | 873
Ahoj,
velmi kvalitně byť obsáhle je problematika CORS popsána zde:
https://developer.mozilla.org/…eb/HTTP/CORS
z kódu a informací, které Jsi publikoval nejde poznat, kde je chyba, nevolá ajax presenter na jiné doméně? Jak vypadá Router?
Editoval m.brecher (25. 2. 2023 1:11)
- Marek Bartoš
- Nette Blogger | 1280
Místo vytvoření odkazu na BasePresenter:handleMyAjaxRequest
jsi vložil obyčejný string.
Editoval Marek Bartoš (25. 2. 2023 1:48)
- Lukas99
- Člen | 8
m.brecher napsal(a):
Ahoj,
velmi kvalitně byť obsáhle je problematika CORS popsána zde:
https://developer.mozilla.org/…eb/HTTP/CORS
z kódu a informací, které Jsi publikoval nejde poznat, kde je chyba, nevolá ajax presenter na jiné doméně ?? Jak vypadá Router ??
Ahoj,
vše mám na localhostu a virtual hosty nastaveny na dev.myproject.cz
Router vypadá takhle
final class RouterFactory
{
use Nette\StaticClass;
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->addRoute('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
Děkuji
- dms
- Člen | 94
Jsou dvě možnosti (respektive je jich asi víc ale 2 základní co se nejvíc používají):
1) pokud máš js v latte šabloně
$.ajax({
url: '{plink myAjaxRequest!}', // nebo možná jen {plink myAjaxRequest!} bez uvozovek nevím jak se to escapuje teď z hlavy
type: 'POST',
});
2) pokud máš js mimo latte, tak někde v latte umístit např takto element
<div id="xxx" data-url="{plink myAjaxRequest!}"
a pak js přepsat na
$.ajax({
url: document.getEelementById('xxx').dataset.url,
type: 'POST',
});
Editoval dms (25. 2. 2023 11:08)