readyState 4 - перенаправление URL возможно? - PullRequest
0 голосов
/ 03 марта 2011

Мне было интересно, если это возможно, когда у вас есть readyState == 4, чтобы перенаправить на страницу ..

    //load the send form
    if (sendRequest) {
        sendRequest.open("POST", urlRequest, true);
        sendRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        sendRequest.setRequestHeader("Connection", "close");
        sendRequest.onreadystatechange = displayStatus;
        sendRequest.send(sendData);
    } else {
        alert("fails"); //alert if request fails
    }
}

function displayStatus() {
    if (sendRequest.readyState == 4) {
        alert("send");
    // redirect to thank you page? 


    } else {
        alert("send fails"); 

} //end readyState

}

я не получу 200

так что на ReadyState 4 я хочу перенаправить на страницу, после отправки формы я хочу перенаправить на страницу. на php mail функция <?php header(location: "url"); ?> не работает так что мне действительно нужно иметь его в ajax / javascript ...

В настоящее время это просто не работает. Любое предложение?

Ответы [ 3 ]

0 голосов
/ 03 марта 2011

Ваш код внутри обратного вызова sendRequest.onreadystatechange? Даже если вы не ожидаете возврата 200, он должен быть в пределах этого обратного вызова.

Попробуйте

sendRequest.onreadystatechange=function(){
  //DEBUG
  alert("ready state change: "+ sendRequest.readyStat);
  if (sendRequest.readyState == 4) {
    alert("form sended");
    window.location = "http://www.mywebsite.com";
  }
}

И Pointy прав: серверная сторона не будет работать по двум основным причинам: одна из них уже отправила заголовок для страницы, выполняющей запрос, и поскольку запрашиваемая страница является AJAX, поэтому только запрашиваемая страница изменится, а не текущая. .

[EDIT] Вы проверили консоль ошибок? Кроме того, эта страница включает случайно кадры?

[РЕДАКТИРОВАТЬ 2]

Я создал jsbin для этого, и он работает на Firefox и Chrome ... http://jsbin.com/umufi4/2/edit

Я вполне уверен, что проблема заключается не в изменении местоположения, если вы используете 'http://' напротив него, а в том, как создается ваш sendRequest. Вот некоторые ошибки, которые я обнаружил. Я уверен, что они связаны с jsbin и удаленным доступом, но если они существуют на вашем конце, это может помешать ему добраться до window.location

ОШИБКА: Отказался устанавливать небезопасный заголовок «Соединение» XMLHttpRequest не может загрузить http://jromero.me/. Origin http://jsbin.com не разрешен Access-Control-Allow-Origin. jromero.meНе удалось загрузить ресурс

У меня есть несколько вопросов:

  1. Это междоменный запрос?
  2. Вы получаете окно с предупреждением "Отправить"?
  3. Является ли sendRequest глобальной переменной?
0 голосов
/ 06 марта 2011

Спасибо, Дж. Ромеро.С помощью вашего ввода я смог найти причину проблемы и создать скрипт немного по-другому.

Это не было междоменной проблемой - эти настройки установлены правильно.Поле оповещения корректно, а sendRequest является глобальным, поэтому все функции могут вызывать его.

Это приводит только к 1 ошибке, и это в форме.имел onSubmit="return checkForm(this);" action="" Это должно быть onSubmit="checkForm(this); return false;" action=""

с событием onSubmit, возвращающим значение false, поэтому форма не отправляется как обычно.и правильно построить js и ajax для завершения формы отправки.проверить форму -> когда все в порядке -> подготовить форму -> вызвать ajax -> все действительные -> отправить форму -> перенаправить на страницу благодарности.

Спасибо всем за помощь!

0 голосов
/ 03 марта 2011

Вы имеете в виду, что вы хотите перенаправить, как только Ajax успешно? Если да, попробуйте использовать функцию jquery ajax () и добавьте код перенаправления в качестве обратного вызова успеха

http://api.jquery.com/jQuery.ajax/

post () - более простая альтернатива http://docs.jquery.com/Post

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...