Ответ 1
1) Используйте другой код состояния, чем 301 (2 **) (если запрос ajax) и перенаправление дескриптора на стороне клиента:
var STATUS = {
REDIRECT: 280
};
$.post('/redirected', {}, function(response, status, request) {
if (status == STATUS.REDIRECT) {
// you need to return the redirect url
location.href = response.redirectUrl;
} else {
$('#content').html(request.responseText);
}
});
2) НЕ ПЕРЕДАЙТЕ:
Я использую это в "перенаправлении шаблона" = перенаправление после почтового запроса (вы не хотите разрешать пользователю обновлять почтовый запрос и т.д.)
С помощью ajax-запроса это необязательно, поэтому, когда post-запрос является ajax, я вместо этого пересылаю (просто пересылаю другой контроллер - зависит от вашей серверной структуры или того, что вы используете...). Запросы POST не кэшируются браузерами.
Собственно, я не знаю, в чем причина, в которой вы нуждаетесь, поэтому это может быть не так полезно для вас. Это полезно, когда сервер возвращает разные ответы на запросы ajax, чем обычные запросы, потому что когда браузер перенаправляет запрос ajax, перенаправленный запрос не является XMLHttpRequest...
[обновлено]
Вы можете получить доступ к заголовкам (перенаправленного запроса) следующим образом:
$.post('redirected', {}, function(r, s, req) {
req.getAllResponseHeaders();
req.getResponseHeader('Location');
});
Должен быть заголовок "Местоположение", но он зависит от сервера, от которого отправляются заголовки...