Как получить заголовок "location" с помощью функции jQuery $ .post? - PullRequest
2 голосов
/ 01 февраля 2012

Я пытаюсь создать всплывающее окно (с jQuery), которое может обрабатывать формы, и по большей части у меня все это работает.Единственная проблема, с которой я столкнулся, заключается в том, что при успешном входе в систему и / или регистрации PHP отправляет местоположение заголовка для перенаправления пользователю в его «дом», и это создает бесконечный цикл перенаправлений в div, в который я загрузил форму.

Как бы я начал читать, если в запросе на публикацию был отправлен заголовок location, а затем получить фактический URL-адрес, отправляемый как новый location?

Это то, что я пробовал до сих пор (среди прочего):

$('.register').live('submit', function(e) {

    e.preventDefault();

    var form_data = $(this).serialize() + '&register=register&js=true';

    $.post(site_path + '/register', form_data, function(data, text, xhr) {

        alert(xhr.getResponseHeader("Location"));

        // $('.overlay_container').html(data);

    });

});

Не уверен, что именно я делаю неправильно, но, насколько я знаю, что-то в этом роде должно работать.Я также попытался сделать это с простым пост-запросом AJAX без ожидаемого результата.

Просто заметьте, что заголовок местоположения не всегда отправляется;только когда кто-то успешно входит в систему, регистрируется и т. д.

В идеале это то, чего я пытаюсь достичь:

$('.register').live('submit', function(e) {

    e.preventDefault();

    var form_data = $(this).serialize() + '&register=register&js=true';

    $.post(site_path + '/register', form_data, function(data, text, xhr) {

        var header_location = xhr.getResponseHeader("Location");

        if(header_location == null) {

            $('.overlay_container').html(data);

        }else{

            window.location = header_location;

        }

    });

});

1 Ответ

1 голос
/ 01 февраля 2012

Насколько я знаю, вы на самом деле не можете прочитать заголовок Location, так как JavaScript следует за ним до тех пор, пока он не остановится, а затем отправляет обратно headers, что означает, что я получаю заголовки целевой страницы, а не страница, которая была первоначально размещена на.

Поэтому я отредактировал свою функцию перенаправления, которая есть в моем скрипте PHP, для отправки настраиваемого заголовка, если страница была запрошена с использованием JavaScript (или jQuery).

public function redirect($redirect = NULL) {

    global $_CONFIG;

    if($_POST['js'] == 'true') {

        exit(header('Redirect: ' . $_CONFIG['site']['path'] . '/' . $redirect));

    }else{

        exit(header('Location: ' . $_CONFIG['site']['path'] . '/' . $redirect));

    }

}

Таким образом, я могу читать, если перенаправление действительно было отправлено, и правильно обрабатывать его в конце JavaScript (jQuery).

Вот как выглядит окончательный результат:

$('.popup').on('submit', '.register', function(e) {

    e.preventDefault();

    var action = $(this).attr('action'), form_data = $(this).serialize() + '&register=register&js=true';

    $.post(action, form_data, function(data, text, xhr) {

        var header_location = xhr.getResponseHeader('Redirect');

        if(header_location == null) {

            $('.overlay_container').html(data);

        }else{

            window.location = header_location;

        }

    });

});
...