Подтвердить что ты не робот

Относительные и абсолютные URL-адреса в запросах JQuery AJAX

Мне сложно получить мои запросы AJAX для работы на промежуточном сервере. Все это отлично работало на моей машине разработки, но как только я ее загрузил, все мои запросы AJAX перестали работать. Я узнал, что если я изменю относительные URL-адреса (например, index.php) на абсолютные URL-адреса ( " 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

4b9b3361

Ответ 1

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

Ответ 2

ЕСЛИ вы используете маршрутизацию 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

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

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

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

Например, в моей файловой структуре у меня есть папка с именем 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
            })
        }
    });

Ответ 4

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

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

Другой подход заключается в подключении этих переменных к объекту window:

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

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

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

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