Вторая форма Javascript POST не работает в Chrome, работает в IE и FF - PullRequest
3 голосов
/ 29 июля 2011

Я открываю новое окно через JavaScript POST в ответ на щелчок пользователя во флэш-приложении.Пользователь может закрыть новое окно и захотеть снова открыть его, снова нажав кнопку на первой странице.Так как мне нужно передать несколько больших аргументов на вторую страницу, я должен сделать POST, GET не будет работать.До сих пор у меня открывается вторая страница, и она ведет себя правильно в Chrome, FF и IE при первом нажатии кнопки.Однако в Chrome (он работает в IE и FF) при втором нажатии кнопки POST игнорируется, а новое окно не открывается.

Вот функция, которую я использую для выполнения POST.Я убедился, что он проходит весь путь до строки form.submit () в Chrome со всеми теми же параметрами и без уведомлений об ошибках, но новое окно по-прежнему не открывается.

function post_to_url(path, paramString) {
    var params = paramString.split("|");

    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", path);
    form.setAttribute("target", "_blank");

    for (var i=0; i<params.length; i++) {
        var hiddenField = document.createElement("input");
        var param = params[i].split(":");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", param[0]);
        hiddenField.setAttribute("value", param[1]);

        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
}

Любые идеи о том, как это можно изменить, чтобы заставить его работать и в Chrome?

Обновление: похоже, что форма не удалена из DOM в Chrome.Я не уверен, является ли это проблемой или нет, но ее следует удалить независимо.

Мы также заметили, что хотя 2-е POST в Chrome в Linux и Windows не проходят, они выполняются на Mac.,Тем не менее, даже на Mac форма не удаляется из DOM.

Еще одно обновление: подобное изменение кода корректно удаляет форму из DOM, но не решает проблему POST.

function post_to_url(path, paramString) {
    var postform = document.getElementById("postform");
    if (postform != null)
        document.body.removeChild(postform);
    var params = paramString.split("|");

    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", path);
    form.setAttribute("target", "_blank");
    form.id = "postform";

    for (var i=0; i<params.length; i++) {
        var hiddenField = document.createElement("input");
        var param = params[i].split(":");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", param[0]);
        hiddenField.setAttribute("value", param[1]);

        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);
    form.submit();
    var postform = document.getElementById("postform"); 
    document.body.removeChild(postform);
}

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Я нашел решение.Добавление случайного числа в конец URL заставляет Chrome запускать POST несколько раз.В Chrome должна быть «функция», которая запрещает нескольким запросам POST на один и тот же URL.

Вот что я изменил:

form.setAttribute("action", path + '?' + Math.random().toString());
0 голосов
/ 29 июля 2011

Убедитесь, что блокировщик всплывающих окон не блокирует второе открытие.Недавно у меня была проблема, похожая на эту.

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