Лучшая практика использования URL-адреса действия при вызове ajax в cakePHP - PullRequest
5 голосов
/ 28 июля 2010

Я использую ajax с jQuery в своем приложении cakePHP.
и моя функция javascript находится внутри файла javascript.

теперь в моей локальной системе файлы хранятся в каталоге "/ sample", поэтому путь при вызове функции будет

в ajax.js

$.post({url : "/sample/controller/action"})

но после его размещения URL станет

$.post({url : "/mydomain.com/controller/action"})

в cakePHP мы $html->url создадим URL
, но так как этот код находится в js-файле, я не могу использовать эту функцию

я не хочу менять все URL-адреса действий ajax вручную перед хостингом

Ответы [ 5 ]

23 голосов
/ 28 июля 2010

В своем основном шаблоне для приложения для торта создайте глобальную переменную javascript, которую можно использовать во всем приложении.Убедитесь, что он существует до того, как вы включите любые JS-файлы.

<head>
    ...
    <script type="text/javascript">var myBaseUrl = '<?php echo $html->url; ?>';</script>
    ...
    <script type="text/javascript" src="mycustomJSfile.js">
    ...
</head>

Теперь вы можете делать подобные вещи из любого файла представления, который есть в вашем приложении MVC Framework.

$.post({url: myBaseUrl + 'controller/action'});
6 голосов
/ 29 сентября 2012

Я обновляю ответ Пола Драгуниса, чтобы отразить последнюю версию CakePHP (2.2).

В вашем файле макета установите переменную JavaScript с помощью JSHelper CakePHP: <?php echo $this->Js->set('url', $this->request->base); ?>, где $this->request является экземпляром CakeRequest и предоставляет информацию о текущем запросе.

После строки выше запишите буфер с <?php echo $this->Js->writeBuffer(); ?>.

Затем вы можете получить доступ к этой переменной в JavaScript с помощью app.url.

3 голосов
/ 27 апреля 2017

@ irtiza Ваш ответ приветствуется, но для cakephp последней версии 3.x это сработает, иначе вы получите ошибку маршрутизации.

ulr:'<?php echo \Cake\Routing\Router::url(array('controller' => 
'controllername', 'action' => 'actionname')); ?>'
1 голос
/ 23 июля 2016

использование

echo Router::url(array('controller' => 'Users', 'action' => 'all'));

Будет выводить;

/Users/all

в js

$.post({url : "<?php echo Router::url(array('controller' => 'Users', 'action' => 'all')); ?>"})
1 голос
/ 18 августа 2011

в ответ Полу Драгунису вы можете использовать $this->webroot, если используете подпапки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...