пожалуйста, примите во внимание следующее: на странице A у меня есть ссылка, которая ведет вас на страницу B, когда JS выключен, но когда JS включен, я хочу заменить содержимое на текущей странице содержимым со страницы B.
Страницы A и B на самом деле являются одним и тем же сценарием, который может отличать вызовы AJAX от обычных и соответствующим образом обслуживать контент. Все работает нормально, пока не происходит перенаправление.
Но иногда происходит перенаправление 301, и, похоже, происходит то, что клиентский браузер затем делает второй запрос, который возвращает 200 OK. Только второй запрос отправляется без заголовка X-Requested-With, поэтому я не могу сказать в моем скрипте, пришёл он из AJAX или нет, и отправит полную страницу вместо только содержимого.
Я попытался проверить код состояния 301 в обработчиках ошибок, успешных и полных обработчиков, но ни один из них не сработал. Кажется, что он обрабатывает 301 за кулисами.
Может ли кто-нибудь помочь мне с этим?
jQuery 1.4, PHP 5
Редактировать: Люди просили код для этого, который я не считал необходимым, но здесь идет:
// hook up menu ajax loading
$('#menu a').live("click", function(){
// update menu highlight
if($(this).parents('#menu').size() > 0){
$("#menu>li").removeClass("current_page_item");
$(this).parent().addClass("current_page_item");
}
// get the URL where we will be retrieving content from
var url = $(this).attr('href');
window.location.hash = hash = url;
$.ajax({
type: "GET",
url: url,
success: function(data){
// search for an ID that is only present if page is requested directly
if($(data).find('#maincontent').size() > 0){
data = $(data).find('#maincontent .content-slide *').get();
}
// the rest is just animating the content into view
$("#scroller").html(data);
$('.content-slide').each(setHeight);
$('.content-slide').animate({
left: "0px"
}, 1000, 'easeOutQuart',
function(){
$('#home').css("left", "-760px").html(data);
$('#scroller').css("left", "-760px");
$('.content-slide').each(setHeight);
}
);
}
});
return false;
});