Ответ 1
Попробуйте добавить /
до index.php
в свой первый пример, чтобы заставить его смотреть из корня. Дважды проверьте, чтобы ваши каталоги-структуры были точно такими же, где index.php
.
Мне сложно получить мои запросы 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
Попробуйте добавить /
до index.php
в свой первый пример, чтобы заставить его смотреть из корня. Дважды проверьте, чтобы ваши каталоги-структуры были точно такими же, где index.php
.
ЕСЛИ вы используете маршрутизацию 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..
Это старый пост, поэтому мне очень жаль его вытащить. Но это было очевидно для моей проблемы, и это был лучший результат в 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
})
}
});
Я думаю, что лучший способ избежать подобных проблем - настроить файл конфигурации для 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 и пути изменяются соответствующим образом.