Относительные и абсолютные URL в запросах jQuery AJAX - PullRequest
23 голосов
/ 02 марта 2010

Мне сложно заставить мои AJAX-запросы работать на промежуточном сервере. На моей машине для разработки все работало нормально, но как только я загрузил его, все мои запросы AJAX перестали работать. Я обнаружил, что если я изменю относительные URL (например, «index.php») на абсолютные («http://example.com/index.php")», запросы снова будут работать, но я не понимаю, почему.

Пример запроса:

jQuery.post('index.php', {id: 1234, action: 1, step: 1}, function(data) { /* something */ });

Это не работает, я даже не появляюсь в консоли firebug. Однако вызывается обработчик успеха, что очень сбивает с толку.

Это прекрасно работает:

jQuery.post('http://example.com/index.php', {id: 1234, action: 1, step: 1}, function(data) { /* something */ });

Кто-нибудь может объяснить, почему запросы AJAX ведут себя таким образом? X_x

Ответы [ 4 ]

40 голосов
/ 02 марта 2010

Попробуйте добавить / перед index.php в первом примере, чтобы он выглядел из корня. Дважды проверьте, чтобы убедиться, что ваши структуры каталогов точно одинаковы в отношении того, где index.php.

5 голосов
/ 08 ноября 2012

Если вы используете маршрутизацию URL, например, в инфраструктуре MVC, она всегда будет относиться к странице, через которую выполняется выполнение, что не обязательно соответствует URL в вашей адресной строке.

Рассмотрим следующую файловую структуру:

mysite/index.php
mysite/resources/javascript/my_javascript.js
mysite/resources/css/my_css.css

Обычно платформы MVC маршрутизируют все запросы страниц через один файл, такой как index.php, (http://www.mysite.com/index.php). Это облегчает использование относительных URL, поскольку ресурсы и сценарии всегда будут находиться на одном и том же относительном пути. Javascript всегда будет в / resources / javascript / CSS всегда будет в / resources / css /

независимо от того, что находится в адресной строке браузера. Это может быть:

http://www.mysite.com/index/
http://www.mysite.com/kittens/
http://www.mysite.com/kittens/cute/
http://www.mysite.com/kittens/fluffy/
etc..
3 голосов
/ 14 июня 2011

Это старый пост, поэтому извините, что вытащил его. Но это, очевидно, имело отношение к моей проблеме, и это был лучший результат в Google.

После некоторых экспериментов с точно такой же проблемой я определил ответ.

Независимо от того, откуда вы запускаете скрипт, запрашиваемый файл относится к /

Например, в моей файловой структуре есть папка с именем js. Под ним находится мой файл ajaxProcess.js. Файл xml, который я пытался прочитать, находился в том же каталоге, поэтому следуя стандартным правилам, было бы разумно, чтобы URL-адрес вызова ajax просто был url: 'myfile.xml' Однако это не сработало.

После некоторой игры я поместил свой xml в / и снова запустил ajax. Vuala!

Еще немного поиграться, и я обнаружил, что вообще не имеет значения, откуда вы вызываете js, все равно по умолчанию будет /

Я закончил тем, что поместил свой xml в папку 'xml', и теперь следующий ajax будет работать откуда угодно:

$.ajax({
        type:'get',
        dataType: 'xml',
        url: 'xml/class.xml',
        success: function(xml){
            $(xml).find('class').each(function(){
                //code here
            })
        }
    });
2 голосов
/ 09 ноября 2013

Я думаю, что лучший способ избежать такого рода проблем - это настроить файл конфигурации для javascripts в заголовке вашего HTML. Вы можете включить что-то подобное в заголовок страницы:

<script>
        var url = "http:\/\/www.yourdomain.com\/application";
        var path = "\/path\/on\/server\/to root folder";
</script>

Другой подход - присоединить эти переменные к объекту окна:

 <script>
window.myUrl = "http:\/\/www.yourdomain.com\/application";
...
    </script>

Итак, позже вы можете использовать эти переменные внутри js-файлов:

jQuery.post( url+'/index.php', {id: 1234, action: 1, step: 1}, function(data) { // something });

Сценарий в заголовке может быть сгенерирован автоматически на основе конфигурации вашего приложения, поэтому при развертывании приложения URL и переменные пути изменяются соответственно.

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