отправка формы в jquery - не работает в firefox

Попытка создать и отправить форму в вызове javascript. Этот код отлично работает в Chrome, но не в Firefox и IE. Сначала я получаю значения из вызова Ajax (JSON), а затем отправляю их в виде формы.

$('<form name="acsform" action="' + JSONobject.formacsurl +'" method="POST">' + 
  '<input type="hidden" name="PaReq" value="' +JSONobject.formpareq + '">' +
  '<input type="hidden" name="TermUrl" value="'+ JSONobject.formtermUrl +'">' + 
  '<input type="hidden" name="MD" value="'+ JSONobject.formmd +'">' +
  '</form>').submit();

Любые идеи?

Просто добавлю... когда я уведомляю о некотором тексте строкой ниже этой отправки, я получаю окно предупреждения на экране. Может показаться, что браузер нормально обрабатывает этот код (возможно, даже отправляет форму), но меня не перенаправляют на форму action. Я также не получаю никаких ошибок JS.

Еще раз, он терпит неудачу только в Firefox и IE, Chrome отлично выполняет отправку и перенаправление.


person vault-boy    schedule 05.01.2012    source источник
comment
Возможно, я что-то упустил, но создание формы, которая отправляет данные, которые уже известны, кажется немного затянутым. Более просто вы могли бы извлечь данные, как вы сделали, и .post() без форма   -  person T I    schedule 05.01.2012
comment
Почему бы просто не использовать $.post(JSONobject.formacsurl, JSONobject)?   -  person dfsq    schedule 05.01.2012
comment
Я думаю, что для того, чтобы форму можно было отправить с помощью Firefox или IE, она должна существовать в теле. Таким образом, вы всегда можете добавить его в форму, а затем попытаться опубликовать его. Но, как сказал @TomIngram, вы должны использовать $.post().   -  person jValdron    schedule 05.01.2012
comment
С post() я не могу «следовать» форме. Я отправляю эту форму во внешнюю службу, которая на следующем этапе направляет меня на другую внешнюю страницу. Меня нужно перенаправить на адрес, указанный в действии формы вместе с формой   -  person vault-boy    schedule 05.01.2012
comment
как указал JValdron, причина, по которой это не будет отправлено в FF, заключается в том, что создаваемая вами форма не была добавлена ​​​​в DOM. Если вы сначала добавите элемент к чему-либо в DOM, вы сможете отправить его.   -  person kasdega    schedule 05.01.2012


Ответы (3)


Попробуйте этот код:

$(document).ready(function()
{
    /*
    *    IF IS APPEND, USE A ID OR CLASS
    */
    $('#X').append('<form id="myNewForm" class="myNewForm" method="post" action="">...</form>');
    $('#myNewForm').submit();

    //OR USE CLASS NAME
    $('form.myNewForm').submit();

    /*
    *    IF NOT APPEND, USE A ID OR CLASS
    */
    //USEA ID
    $('#myForm').submit();

    //USE A CLASS NAME
    $('form.my-form').submit();

    //USE A ELEMENT( ALL )
    $('form').submit();

});

До свидания!

person Jorge Olaf    schedule 05.01.2012
comment
Нет проблем, это stackoverflow! ;) - person Jorge Olaf; 05.01.2012

Честно говоря, я не уверен, можно ли задать вопрос о stackoverflow, прокомментировав его, и можно ли его поднять, ответив на ваш собственный вопрос, но на самом деле не хочу создавать новый и копировать содержимое этого.

У меня есть этот код, основанный на решении Олафа

    $('#basic-modal-content').append('<form id="acsform" name="acsform" action="' + JSONobject.formacsurl +'" method="POST">' + 
    '<input type="hidden" name="PaReq" value="' +JSONobject.formpareq + '">' +
    '<input type="hidden" name="TermUrl" value="'+ JSONobject.formtermUrl +'">' + 
    '<input type="hidden" name="MD" value="'+ JSONobject.formmd +'">' +
    '</form>');
    $('#acsform').submit();

Это отлично работало в IE, Firefox, Opera и Chrome. Но сегодня мы получили отчет от клиента, что процесс не работает с его iPad. К сожалению, я не могу получить информацию о том, какой именно браузер он использует на этом айпаде (и у меня нет айпада, чтобы проверить), но похоже, что этот фрагмент кода не сработал. Последняя операция в журналах — это операция ajax, которая создает объект JSON, а приведенный выше js запускается после получения этого JSON. Тогда это мое предположение. Знаете ли вы что-нибудь из головы о том, что эта отправка формы является проблемой в браузере ipad по умолчанию (каким бы ни был этот браузер)

person vault-boy    schedule 23.02.2012

Используйте собственный submit() с идентификатором.

$('<form/>', {name:"acsform", id:"acsform", method:"POST", action: JSONobject.formacsurl})
.append(
  $('<input/>', {type:"hidden", name:"PaReq", value: JSONobject.formpareq}),
  $('<input/>', {type:"hidden", name:"TermUrl", value: JSONobject.formtermUrl}),
  $('<input/>', {type:"hidden", name:"MD", value: JSONobject.formmd})
).appendTo(document.body)
$("form#acsform")[0].submit()
person Stiffels    schedule 04.06.2018