Cros policy error při ajaxu

Lukas99
Člen | 8
+
0
-

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 | 758
+
-3
-

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 | 1167
+
+2
-

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
+
0
-

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

Lukas99
Člen | 8
+
0
-

Marek Bartoš napsal(a):

Místo vytvoření odkazu na BasePresenter:handleMyAjaxRequest jsi vložil obyčejný string.

Ahoj Marku,
myslíš že by jsi mohl uvést jak by měl ten odkaz vypadat, případně jak ho vytvořit?
Děkuji za reakci.

dms
Člen | 87
+
+1
-

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)

Lukas99
Člen | 8
+
0
-

Děkuji všem za rady