【问题标题】:Submit a form loaded thru Ajax with jQuery使用 jQuery 提交通过 Ajax 加载的表单
【发布时间】:2015-05-17 07:17:55
【问题描述】:

我有一个在用户选择一系列选项后动态加载的表单。

显示表单后,用户必须单击表单中的按钮以确认选择并重定向到第三方站点。 在用户被重定向之前,我需要通知我们的系统用户已确认选项并生成一个 ID 以传递第三方站点,以便它可以识别交易。

jQuery函数如下。

$.ajax({
    type: "GET",
    url: 'functions.php?funcion=transaccion&order=' + pedido , 
    dataType: "xml",
    success: function(xml){
        $("#param").val($(xml).find('trxid').text());
        $('#form_pago').submit();
    },
    error: function() {
        alert("Error en transaccion.");
    }
}); 

ID被带回,但表单没有提交。

我的猜测是问题是表单正在动态加载,因此在解析 DOM 时它不存在,但我找不到如何在任何地方提交它。

编辑:

似乎我的问题不够具体,或者我没有理解答案,因为它们没有解决我的问题..

这里是完整版的代码:

这是加载表单的函数。

function mostrarFormulario(pedido){
    $.ajax({
        type: "GET",
        url: 'functions.php?funcion=getFormularioPago&pedido=' + pedido, 
        dataType: "xml",
        success: function(xml){
            $("#fin_pedido").html($(xml).find('formulario').text());
        },
        error: function() {
            alert("Se ha producido un error al generar el boton para realizar el pago.");
        }
    }); 
}

这是正在加载的表单

<form method="post" action="https://sps433.decidir.net/sps-ar/Validar" target="_top" id="pago_decidir">  
  <input name="NROCOMERCIO" value="xxxxxxx" type="hidden">
  <input name="NROOPERACION" value="NROOP" type="hidden">
  <input name="MONTO" value="nnnnnnnn" type="hidden">
  <input name="CUOTAS" value="" type="hidden">
  <input name="URLDINAMICA" value="http://URL-RETORNO" type="hidden">
  <input name="EMAILCLIENTE" value="xxxxxx@xxxxxx" type="hidden">
  <input name="MEDIODEPAGO" value="xxxxx" type="hidden">
  <input name="PARAMSITIO" value="" id="paramsitio" type="hidden">
  <input value="Pagar con Decidir" name="submit" alt="Pagar con Decidir" onclick="generarTransaccion('nnn')" border="0" type="button">
</form>

这是 onClick 中调用的函数,它应该在检索到需要发送的 ID 后提交表单。

function generarTransaccion(pedido) {
    $.ajax({
        type: "GET",
        url: 'functions.php?funcion=transaccion&pedido=' + pedido , 
        dataType: "xml",
        success: function(xml){
            $("#paramsitio").val($(xml).find('trxid').text());
            $('#pago_decidir').submit();
        },
        error: function() {
            alert("Se ha producido un error al generar el boton para realizar el pago.");
        }
    }); 
}

此函数正确检索并替换ID,但不提交表单。

【问题讨论】:

  • 如果你把console.log($('#form_pago'))放在success方法的前面会报告什么?
  • 您可以在成功回调中设置调试器语句,并检查是否在该上下文中找到了 from_pago,同时检查下一个 url 是否设置正确?
  • 也许显示表单是如何附加的?至少在第一次提交时首先将数据发送到您的 ajax 的 onsubmit,以及之后如何更改第三方重定向 :)
  • 我将问题编辑得更具体。 URL 是正确的,因为如果我更改提交按钮,它会正确到达目的地,但没有所需的 ID。

标签: javascript php jquery ajax forms


【解决方案1】:

尝试用“.on()”包装你的提交 例如

$("#formcontainer").on("click", ".dynamicformbutton", function(){
    $('#form_pago').submit();
});

formcontainer 是您要放置表单的容器的 ID,而 dynamicformbutton 是表单中的一类提交按钮。

编辑:您需要将其放在 ajax 调用之外。

【讨论】:

  • 按钮有一个正确执行的onClick,它的表单提交失败。我将问题编辑得更具体并提供了额外的代码
【解决方案2】:

由于表单是动态加载的,它不会出现在 DOM 中。因此,您需要将事件绑定到监听单击提交按钮的文档。

所以,如果你的表单提交按钮有Id="btn",那么这应该可以工作 -

$(document).on('click', '#btn', function() {
    // do your stuff
    ...
});

【讨论】:

  • 按钮有一个正确执行的onClick,它的表单提交失败。我将问题编辑得更具体,并提供了额外的代码。
【解决方案3】:

使用这个完整的代码:

$(document).on('click', '#buttonID', function() {
   $.ajax({
    type: "GET",
    url: 'functions.php?funcion=transaccion&order=' + pedido , 
    dataType: "xml",
    success: function(xml){
        $("#param").val($(xml).find('trxid').text());
        $('#form_pago').submit();
    },
    error: function() {
        alert("Error en transaccion.");
    }
});
});

发出警报(“1”);代码中的函数,可帮助您检查此代码是否正常工作。谢谢

【讨论】:

  • 这对我没有任何作用。函数正在执行,提交失败。
【解决方案4】:

尝试将查找功能也添加到表单中 $('#form_pago').find('form').submit();

【讨论】:

  • 欢迎来到 SO!请尝试改进您的答案,也许可以提供更多详细信息,说明您的答案是正确的。您是否尝试重现您的代码?如果$f('#form_pago') 已经是一个表单元素,为什么还要使用find
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2012-09-07
相关资源
最近更新 更多