taral
@taral
php программист

Как вы передаете относительные url в $.ajax?

Суть задачи думаю ясна. Находимся мы по адресу

mysite.com/index.php/site/index

хотим сделать запрос на адрес mysite.com/index.php/site/request

если передать в $.ajax '/index.php/site/request' мы получим верный результат. Но если сайт находится не в корне, а папке

mysite.com/site/index.php/site/index наш пример работать не будет.

Также недостаток этого способа в том что необходимо добавлять index.php/ в адрес. Если мы захотим изменить его придется править скрипты.

Думал над прописыванием Но от index.php мы все равно не избавимся. Да и не нравится мне этот способ.

Пока что я остановился на таком.

В хеаде страницы описываю скрипт

window.createUrl=function(route, params){<br>
     var url = 'http://mysite.com/index.php/' + route;<br>
    if(params)<br>
        url+='?' + $.param(params)<br>
    return url;<br>
}<br>


и теперь в любом месте кода

var url=createUrl('site/request');



А потом я подумал. Генерировать url адреса в js необходимо только при ajax запросах (по крайней мере в моем случае).

Почему бы не научить $.ajax понимать url такого вида 'site/request'. Собственно в этом и вопрос. Как заставить код $.ajax('site/request'); работать правильно. Как правильно расширить $.ajax и добавить модификацию по работе с url.



Свои мысли по этому поводу я описал подробно поскольку я могу копать вообще не в том направлении. И возможно мне необходим пинок в нужную сторону. На сем откланяюсь.
  • Вопрос задан
  • 9194 просмотра
Решения вопроса 1
@tnz
Полагаю вас спасет jQuery.ajaxPrefilter
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
marcus
@marcus
Что вообще за странный формат адресов index.php/site? Почему не index/site? Почему не /site? Смотрите mod_rewrite.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Давно уже не страдаю такой головной большую. Для Symfony2 есть чудная штука как FOSJsRouting. Суть такова: правила маршрутизации экспортируются в JS и мы просто используем метод generate маршрутизатора, передавая туда имя маршрута и параметры.

Думаю при небольшом желании подобное можно реализовать самостоятельно. Считаю это самым красивым способом.
Ответ написан
winbackgo
@winbackgo
Чтобы никогда не возникало недоразумений нужно использовать абсолютные ссылки, т.е. начинать их с корня /. Добавлять /index.php или нет, должно настраиваться в серверной части и именно там должны формироваться правильные ссылки. Сугубо мое мнение.
Как вариант можно определить глобальную переменную var PATH_PREFIX = '/index.php' и везде писть тип $.get(PATH_PREFIX + url). Ну а если уж хочется сделать это прозрачно то нужно переопределять $.ajax метод. Например:
(function($){
var ajax = $.ajax;

$.ajax = function(url, options){
  if ( typeof url === "object" ) { 
    options = url;
  }
  else
  {
    options = options || {};
    options.url = url;
  }
   options.url  = change_url(options.url);
   return ajax(options);
}

}(jQuery));



если передать в $.ajax '/index.php/site/request' мы получим верный результат. Но если сайт находится не в корне, а папке
это всегда будет работать правильно. А вот index.php/site/request — нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы