JQuery - Incapaz de forma dinámica acción de cambio de un formulario y enviarlo dentro del evento éxito de ajaxForm ()

StackOverflow https://stackoverflow.com/questions/3685417

Pregunta

Esta es una forma de pago para ser enviado a la pasarela de pago WorldPay. Cuenta con todos los parámetros de acuerdo con la documentación de WorldPay y funciona bien si directamente publicado.

Sin embargo, ahora que estoy tratando de

  • AJAX publicar el formulario en primer lugar a mi sitio (usando jquery.form, y esa parte está funcionando bien) y luego hacer algunas operaciones de base de datos
  • y cambie el atributo de acción usando javascript y que lo ponga a WorldPay. Pero el puesto WorldPay no funciona y nada alertada después de la línea $("form#wpftuf").submit(); en el siguiente código tampoco está alertando también.

La forma de pago

<form name="wpftuf" id="wpftuf" method="post" action="http://url/of/ajax/file/add_credit"> 
       <input type="hidden" name="operation" value="add_credit" id="operation" /> <?php // for ajax validation ?>
 <input type="hidden" name="worldpayUrl" value="<?php echo WPurl?>" id="worldpayUrl" />
...
..
...other necessary fields
</form>

Aquí estoy pasando la URL WorldPay como parámetro

El AJAX unión

$(document).ready(function() 
 {

  var options = {
            dataType:  'json',
            beforeSubmit: function()
            {
       //alert("submitting");
      },
            success: function(data)
            {
                if(data)
                {
                 if(data.success)
                 {
                  var worldpayUrl = $("input[id=worldpayUrl]").val();
                            $("form#wpftuf").attr("action",worldpayUrl);

     alert("this works");
                            $("form#wpftuf").submit();

                                        //This alert does not work
                    alert("this alert does not work "+$("form#wpftuf").attr("action"));
                 }
                }
            }
            ,
            error:function()
            {
             alert("validation failed");
            }
        };

  $("form#wpftuf").ajaxForm(options);


 });

Creo que el error está sucediendo porque estoy tratando de cambiar la acción y presentar dentro caso de éxito de la forma Ajax y la forma es todavía binded. Por lo tanto, he intentado poniendo ciegas $("form#wpftuf").unbind(options);, $("form#wpftuf").unbind(); $("form#wpftuf").unbind(ajaxForm); después de la línea $("form#wpftuf").attr("action",worldpayUrl); (uno a uno), pero en todos los casos me sale este error uncaught exception: Permission denied to call method XMLHttpRequest.open

¿Cómo envío del formulario de forma dinámica a WorldPay tras el éxito de procesamiento de forma ajax. ¿La forma necesidad de ser unbinded primero? Por favor ayuda. Esto puede tener una solución fácil, pero no soy capaz de hacerlo. He buscado mucho.

Nota:
La pasarela de pago WorldPay necesita el usuario para llenar algunas formas allí después de la publicación, por lo que una presentación AJAX utilizando de nuevo ajaxSubmit() no funcionará. Necesito una presentación forma normal allí.

Gracias,
Sandeepan

¿Fue útil?

Solución

No estoy usando el plugin de malsup, pero si estoy en lo cierto, el problema es la .submit(); cuando se utiliza una petición AJAX con la forma, por lo general se establece en no tomar ninguna acción return false; así cuando presente, es sigue siendo bloqueado

el código debe ser algo como esto:

ACTUALIZADO

$("#wpftuf").submit(function(e) {
    e.preventDefault(); // prevent normal form submission, same as return false;
    $form = $(this);
    var worldpayUrl = $("#worldpayUrl").val(); //get the World Pay php url
    var mySiteFirstUrl = $("#mySiteFirstUrl").val(); //get Your Site First php url
    // if ( valid ) { // make a validation here...
    var posts = $(this).serialize(); // get all form fields in form like: name=value
    //start the first ajax request...
    $.ajax({
        type: "POST",
        url: mySiteFirstUrl,
        data: posts,
        success: function(data) { // send back a json formatted response ?
            var result = $.parseJSON(data); //prepare json
            // if ( result ) { //make another validation here...
            // start making the changes to the form here
            // fill all the form fields with the returned json data...
            $form.attr('action' , worldpayUrl ); //give it the action url ); 
            $form.unbind('submit').submit(); //submit it...
            //}
        }
    });
    //}
});

en el uso de sustancias este $("#wpftuf").unbind('submit').submit(); //submit it...

Otros consejos

¿Qué pasa si se intenta cambiar la acción de la forma y volver a presentar no en el éxito de AJAX? P.ej. usted podría utilizar setTimeout de devolución de llamada success y hacer el código después vamos a decir 1 segundo?

Sólo como referencia: http://www.w3schools.com/js/js_timing.asp

No estoy seguro de que entiendo por qué desea hacerlo de la manera que lo haces, pero parece a mí como el XMLHttpRequest está fallando debido a las secuencias de comandos sólo pueden hacer peticiones de vuelta a su servidor de origen.

El objeto XMLHTTPRequest no se le permite hacer multidominio, cross-protocolo, o las solicitudes transversal de puerto. Hay maneras en que puede eludir esta restricción, pero no estoy seguro de que se lo recomendaría que.

Lo que quiero hacer es utilizar el servidor como proxy para publicarla en WorldPay. es decir. los puestos de usuario del formulario a su servidor a través de AJAX. Su servidor realiza todas las manipulaciones neccessary y vuelve a enviar el formulario a WorldPay, analiza el resultado y devuelve el resultado al cliente a través de ajax.

  • ¿Por qué necesita para enviarlo a través de Ajax desde el cliente?
  • ¿Por qué necesita para enviarlo al servidor primero?

Tiene todo tipo de problemas específicos de dominio y caja de arena que van en la forma en que está tratando. No creo que sea posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top