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');
});
Должен быть заголовок 'Location', но это зависит от сервера, какие заголовки отправляются обратно ...