2012-05-14 3 views
0

Я пытаюсь создать запрос Ajax, а затем проанализировать заголовок ответа, чтобы получить атрибут «Местоположение». Это мой код:Ajax запрос, но без содержимого

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
    if(request.readyState == 4 && request.status == 301) { 
     alert('test'); 
     var header = request.getResponseHeader('Location'); 
     console.log(header); 
    } 
} 
request.open('GET', hrefAttr, true); 
request.send(null); 

Проблема заключается в том, что по какой-то причине, просьба отправить и ответ получен тоже (красный «GET» запрос + ответ в Firebug), но я не получаю " test "или любой текст в консоли firebug.

EDIT: Это модифицированный код:

var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
console.log(request.readyState); 
    if(request.readyState <= 3 && request.status == 301) { 
     alert('test'); 
     var header = request.getResponseHeader('Location'); 
     console.log(header); 
    } 
    else if (request.readyState == 0 && request.status == 301) { 
     alert('state0'); 
    } 
} 
request.open('GET', hrefAttr, true); 
request.send(); 

console.log (request.readyState) дает такую ​​последовательность состояний: 1, 1, 2, 4.

На вкладке консоли Firebug Http Request + Response показывают штраф, но красным цветом (если это что-то означает).

Не знаете, почему я не работаю ... Редактировать: Я использую Firefox.

Заранее благодарен!

+0

Вы уверены, что код ответа 301? – Gary

+0

Да, в заголовке я получаю: «HTTP/1.1 301 Moved». –

+0

Как насчет readyState, это 0 случайно? – Gary

ответ

2

К сожалению, XHR будет следовать за 301 и возвращать содержимое перенаправленной страницы. Вы можете увидеть поведение документированного в W3C here.

Если происхождение XMLHttpRequest и происхождение запроса URL такого же происхождения прозрачно следовать редиректу при соблюдении правил запроса событий же происхождения.

Таким образом, в основном ваш запрос прозрачно отслеживает 301. Браузер автоматически перенаправляется, и вы не можете делать то, что вы намереваетесь сделать. Если у вас есть контроль над веб-сервером, это может быть изменено (хотя и против большинства рекомендаций).

Надеюсь, это поможет!

+0

Вот что действительно странно. Когда я отправляю запрос, я не перенаправляюсь, я получаю ответ с хорошим статусом «301», а заголовок в Firebug даже показывает мне информацию «Location: XYZ». Изменить: я проверил и в HTML-заголовке нет HTML. –

Смежные вопросы