Задать вопрос

Как открыть новую вкладку в браузере, передав туда POST?

Доброго времени суток.
Проблема в следующем - посылаю ajax-ом данные на сервер и получаю ответ в виде json, который имеет следующий вид
{"success":false,"type":2,"code":1000,"message":["Текст_1.","Текст_2."]}

На страничке выводится блок с этими сообщениями. Сообщений может быть много, поэтому внизу блока делается ссылка подробнее, которая должна открыть эти сообщения в новой вкладке. А теперь сам вопрос, который меня ставит в тупик - как открыть вкладку, передав ей постом этот json?
  • Вопрос задан
  • 7541 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Создать форму с атрибутами target="_blank" и method="post", а данные записать в скрытые поля. Кнопку submit стилизуйте по вкусу, можете сделать, чтобы она выглядела как ссылка.
Ответ написан
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
При клике на ссылку отменяем действие по умолчанию и открываем новое окно самостоятельно:
var w = window.open();

w.document.open();
w.document.write(...); // Пишем содержание на основе полученного и сохранённого ответа
w.document.close();
Ответ написан
maNULL
@maNULL Автор вопроса
Большое всем спасибо, пришлось немного извратиться, не знаю, насколько костыльный данный способ, но все работает именно так, как и задумывалось.
function sendPostToUrl(url, post) {
    var form = $('<form/>', {
        action: url,
        method: 'post',
        target: '_blank',
        style: {
            display: 'none'
        }
    });
    for (key in post) {
        if ('message' === key) {
            for (i in post[key]) {
                form.append($('<input/>', {
                    type: 'hidden',
                    name: 'message[]',
                    value: post[key][i]
                }));
            }
        } else {
            form.append($('<input/>', {
                type: 'hidden',
                name: key,
                value: post[key]
            }));
        }
    }
    form.submit();
}

$('#learn-more').on('click', function (event) {
    event.preventDefault();
    sendPostToUrl($(this).attr('href'), data);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы