Jquery - Impossibile dinamicamente modificare l'azione di un modulo e inviarlo all'interno della manifestazione di successo ajaxForm ()

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

Domanda

Questa è una forma di pagamento per essere pubblicato a Worldpay gateway di pagamento. Ha tutti i parametri come da documentazione di WorldPay e funziona bene se spedite direttamente.

Ma, ora sto cercando di

  • AJAX inviare il modulo prima al mio sito (utilizzando jquery.form, e che parte sta funzionando benissimo) allora fare alcune operazioni di database
  • e quindi modificare l'attributo action utilizzando JavaScript e post-it a Worldpay. Ma il post WorldPay non funziona e nulla allertato dopo la linea $("form#wpftuf").submit(); nel codice seguente viene, inoltre, non avvertendo troppo.

Il modulo di pagamento

<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>

Qui sto passando l'URL WorldPay come parametro

legame L'AJAX

$(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);


 });

Credo che l'errore sta accadendo perché sto cercando di cambiare l'azione e la presentazione all'interno dell'evento successo del form Ajax e la forma è ancora binded. Così, ho provato mettendo ciecamente $("form#wpftuf").unbind(options);, $("form#wpftuf").unbind(); $("form#wpftuf").unbind(ajaxForm); dopo la linea $("form#wpftuf").attr("action",worldpayUrl); (uno per uno), ma in tutti i casi ottengo questo errore uncaught exception: Permission denied to call method XMLHttpRequest.open

Come faccio a inviare il form in modo dinamico per WorldPay dopo il successo modulo ajax elaborazione. Ha la forma bisogno di essere unbinded prima? Per favore aiuto. Ciò può avere una soluzione facile, ma io non sono in grado di farlo. Ho cercato un sacco.

Nota
Il gateway di pagamento WorldPay ha bisogno l'utente a riempire alcune forme lì dopo la pubblicazione, in modo da una sottomissione AJAX usando ancora ajaxSubmit() non funzionerà. Ho bisogno di un normale invio di un modulo lì.

Grazie,
Sandeepan

È stato utile?

Soluzione

Non sto usando il malsup plug-in, ma se ho ragione, il tuo problema è il .submit(); quando si utilizza una richiesta AJAX con la forma, di solito esso sarà impostato a non prendere return false; azione in modo che quando si sottopone, esso è ancora bloccato

il codice dovrebbe essere qualcosa di simile:

AGGIORNAMENTO

$("#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...
            //}
        }
    });
    //}
});

in uso di sostanze questo $("#wpftuf").unbind('submit').submit(); //submit it...

Altri suggerimenti

Che cosa succede se si tenta di modificare l'azione del modulo e inviarlo nuovamente non in successo di AJAX? Per esempio. si potrebbe usare setTimeout in success callback e fare il codice dopo del diciamo 1 secondo?

Solo per riferimento: http://www.w3schools.com/js/js_timing.asp

Non sono sicuro di ottenere il motivo per cui si vuole farlo nel modo che stai facendo, ma sembra a me come il XMLHttpRequest sta fallendo perché gli script possono fare solo le richieste di nuovo al loro server di origine.

L'oggetto XMLHttpRequest non è consentito di fare cross-domain, cross-protocollo o richieste cross-port. Ci sono modi per aggirare questa restrizione, ma non sono sicuro che mi sento di raccomandare questo.

Quello che vorrei fare è utilizzare il server come proxy per la pubblicazione a WorldPay. vale a dire. l'utente messaggi il modulo per il server attraverso AJAX. Il server fa tutte le manipolazioni necessari e invia nuovamente il modulo per WorldPay, analizza il risultato e restituisce il risultato al client tramite Ajax.

  • Perché avete bisogno di presentarla attraverso ajax dal client?
  • Perché avete bisogno di sottoporlo al vostro server prima?

si dispone di tutti i tipi di problemi di dominio e di sandbox specifiche in corso il modo in cui si sta cercando di. Non credo che sia possibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top