Каков наилучший способ настроить базовый URL для запроса AJAX с использованием Jquery? - PullRequest
9 голосов
/ 18 июля 2011

Поскольку телефонный разрыв основан на локальном html-файле, он не знает о базовом URL удаленного сервера. Интересно, каков наилучший способ установить базовый URL для запросов ajax с использованием jquery? Кто-нибудь может предоставить ссылку на образец?

В настоящее время я думаю об использовании jquery ajax prefilter.

Ответы [ 4 ]

32 голосов
/ 31 января 2012

Семантически правильный способ сделать это - использовать тег <base>:

<head>
    <base href="http://mydomain.com/">
</head>

Затем извлекаем значение следующим образом (к сожалению, jQuery.ajax () не получает это значение автоматически):

$('head base').attr('href');

Ссылка на элемент: http://www.w3.org/TR/html4/struct/links.html#edef-BASE

23 голосов
/ 10 июня 2015

Оба установленных ответа имеют серьезные недостатки.Требование, чтобы вызываемая функция вызывала ваш URL каждый раз, когда вы выполняете запрос, - это много лишней типизации.Добавление базового тега на страницу прекрасно работает большую часть времени, но это создает некоторые проблемы, если вы выполняете тяжелую работу с SVG.Вот простое решение, которое исправляет все ваши URL-адреса сразу, без использования базового тега.

var baseUrl = 'http://my.hardcoded.url/';
$.ajaxSetup({
    beforeSend: function(xhr, options) {
        options.url = baseUrl + options.url;
    }
})
14 голосов
/ 18 июля 2011

Когда я решил эту проблему, я просто поместил эту информацию в качестве элемента данных в теге.

 <body data-base="http://mydomain.com"> ...

И затем использовал ее для построения правильного URL-адреса для данного запроса:

 //If pathOrURL is a relative path (e.g. /users/1), then we return a qualified
 // URL, such as http://mydomain.com/users/1
 // otherwise, we return the URL as is
 var qualifyURL = function(pathOrURL) {
   if (!(new RegExp('^(http(s)?[:]//)','i')).test(pathOrURL)) {
     return $(document.body).data('base') + pathOrURL;
   }

   return pathOrURL;
 };

 //Use this helper function when calling $.ajax
 $.ajax({
   url: qualifyURL(url), ... });

Это отлично сработало для моего опыта с PhoneGap.Надеюсь, это поможет.

1 голос
/ 26 июня 2019

Удалить начальную косую черту, чтобы сделать URL-адрес ajax относительно базы, определенной в заголовке.

<head>
    <base href="http://base.com/">
</head>
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        settings.url = settings.url.replace(/^\//,'')
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...