2010-03-19 4 views
2

Я написал несколько HTML/Javascript, который сидит на стороннем сервере по соображениям безопасности. Эта страница выполняет javascript сообщение на другой странице на том же сайте. Однако вместо того, чтобы отвечать полезными данными, вместо этого он хочет выполнить перенаправление (если вы опубликуете через обычную HTML-форму на эту страницу, это перенаправит ваш браузер). Как я могу обработать этот процесс? Я в основном хочу иметь возможность извлекать параметры запроса url, которые он пытается перенаправить (и затем поместить эту ссылку в скрытое поле формы).Получить ответ jQuery postirectirect

Вот мой основной Аякса пост ...

$.ajax({ 
    url: '/someurl/idontcontrol', 
    data: serialized_form_data, 
    async: false, 
    type: 'POST', 
    success: function(data, textStatus, x) {   
     alert(x); 
     alert(x.getAllResponseHeaders()); 
     return false; 
     $('#redirect_link').val(WHAT_DO_I_PUT_HERE); 
    } 
}); 

Обратите внимание, что URL я отправляю на это не один, что я контролирую, поэтому я не имею никакой власти над тем, что она возвращает.

UPDATE: Когда я использую вышеуказанные предупреждения, я получаю «[object XMLHttpRequest]» и «null». Я отслеживаю заголовки с помощью плагина Firefox, и они, кажется, возвращаются, как ожидалось, но я не могу получить доступ к ним через javascript (я также пробовал x.getResponseHeader («Местоположение»), но это и все остальные вызовы getResponseHeader возвращаются пустым).

ТАКЖЕ: Я не знаю, имеет ли это значение, но код состояния 302 (в отличие от 301 или 303).

Спасибо!

ответ

2

Вы не можете получить полные HTTP-заголовки от вызова AJAX в JQUery, поэтому вы не можете обработать перенаправление таким образом.

Однако с необработанным запросом javascript у вас есть доступ к методу XMLHttpRequest getAllResponseHeaders(), который позволит вам обработать перенаправление (this function for single headers).

+0

Я должен быть в состоянии получить объект XMLHttpRequest в моей функции обратного вызова успеха (см пост Greg S), но это, кажется, не будет получать правильно заселена так мои звонки в любой из этих двух методов не удалось. – Wickethewok

5

В соответствии с методом jQuery Documentation метод успеха может принимать третий аргумент, являющийся объектом XMLHttpRequest. Согласно Mozilla's XMLHttpRequest page, этот объект должен иметь свойство «статус». Если вы проверите значение этого свойства, и это код перенаправления, например 301 (постоянный переадресация) или 303 (временное перенаправление), известно, что страница обработки пытается выполнить перенаправление. Свойство statusText должно быть использовано для определения местоположения, к которому оно пытается перенаправить. Если вы знаете, что пытается перенаправить, вы можете повторно отправить данные через Ajax на новый URL.

Странная вещь, хотя, исследуя это, наткнулась на this page, которая указывает, что объект XMLHttpRequest должен следовать за перенаправлениями (см. Комментарии). Таким образом, похоже, что это не проблема.

Если на странице обработки используется мета-перенаправление HTML (например, ниже) для выполнения перенаправления. В этом случае я не уверен, что можно сделать - возможно, попробуйте проанализировать возвращенный HTML-код для метатег и посмотреть, пытается ли кто-либо попытаться перенаправить.

<meta http-equiv="refresh" content="0;url=http://www.example.com/some-redirected-page"> 
+0

Я добавил третий параметр к функции обратного вызова успеха; однако, когда я пытаюсь вызвать x.getAllResponseHeaders(), он возвращает null. – Wickethewok

+1

statusText и статус должны быть просто свойствами объекта XMLHttpRequest, getAllResponseHeaders, возможно, не нужно вызывать. Что-то вроде alert (x.statusText) или alert (x.status) работает? – sqrl0

+0

Вы нашли причину, по которой 'getAllResponseHeaders()' возвращает 'null'? –

0

К сожалению, напрямую не ответ на ваш вопрос, но я уверен, что это возможно с JQuery тоже, как это довольно просто с Prototype.

 
// Warning: this is Prototype, not jQuery ;-) 
//... 
onComplete: function(response) { 
    var refresh = response.getResponseHeader("Refresh"); 
    var whatever = response.getResponseHeader("Whatever"); 
} 
//... 
+0

«Ответ» просто XMLHttpRequest? Поскольку это то, что я возвращаюсь в jQuery, он просто неправильно заполняется ... – Wickethewok

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