JQuery - Kann nicht ändern Aktion eines Formulars dynamisch und es im Inneren des Erfolgsfall ajaxForm submit ()

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

Frage

Dies ist ein Zahlungsformular zu Worldpay Payment Gateway gebucht werden. Es verfügt über alle Parameter gemäß der WorldPay Dokumentation und es funktioniert gut, wenn sie direkt gebucht.

Aber jetzt versuche ich, zu

  • AJAX das Formular zuerst auf meiner Website veröffentlichen (mit jquery.form, und dass ein Teil funktioniert gut), dann einige Datenbankoperationen tun
  • und dann das Attribut Aktion ändern mit Hilfe von Javascript und es Worldpay schreiben. Aber die worldpay Post nicht funktioniert und etwas alarmiert, nachdem die $("form#wpftuf").submit(); Zeile in dem folgenden Code wird auch nicht zu alarmieren.

Das Zahlungsformular

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

Hier habe ich die worldpay URL als Parameter am Übergang

Die AJAX-Bindung

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


 });

Ich denke, der Fehler passiert, weil ich versuche, um die Aktion zu ändern und die Einreichung innerhalb der Erfolgs Veranstaltung Ajax Form und die Form ist noch binded. Also habe ich versucht, indem sie blind setzen $("form#wpftuf").unbind(options);, $("form#wpftuf").unbind(); $("form#wpftuf").unbind(ajaxForm); nach der $("form#wpftuf").attr("action",worldpayUrl); Linie (eins nach dem anderen), aber in allen Fällen, die ich diesen Fehler uncaught exception: Permission denied to call method XMLHttpRequest.open

Wie stelle ich das Formular dynamisch worldpay nach dem Ajax-Formularverarbeitung Erfolg. Muss das Formular werden zuerst unbinded? Bitte Hilfe. Dies kann eine einfache Lösung, aber ich bin nicht in der Lage, es zu bekommen. Ich suchte eine Menge.

Bitte beachten Sie:
Der worldpay Payment-Gateway muss den Benutzer einige Formulare ausfüllen dort nach Veröffentlichung, so eine AJAX-Vorlage wieder ajaxSubmit() mit nicht funktionieren. Ich brauche eine normale Form Vorlage gibt.

Danke,
Sandeepan

War es hilfreich?

Lösung

ich verwende nicht das malsup Plugin, aber wenn ich mich nicht irre, Ihr Problem ist die .submit();, wenn Sie eine Ajax-Anforderung mit Form, in der Regel wird es eingestellt werden, keine Aktion return false; zu ergreifen, um, wenn Sie eintragen, es noch ist gesperrt

Ihr Code sollte wie folgt sein:

AKTUALISIERT

$("#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 Substanz Verwendung dieses $("#wpftuf").unbind('submit').submit(); //submit it...

Andere Tipps

Was passiert, wenn Sie versuchen, auf die Klage der Form zu ändern und es in AJAX Erfolg erneut nicht? Z.B. Sie könnten setTimeout in success Rückruf und tun Sie den Code nach sagen wir mal 1 Sekunde?

verwenden

Just for reference: http://www.w3schools.com/js/js_timing.asp

Ich bin mir nicht sicher, warum Sie bekommen es die Art und Weise zu tun, wollen Sie es zu tun, aber es scheint mir, wie das XMLHttpRequest versagt, weil Skripte können nur Anfragen an ihre Ursprungsserver machen zurück.

Das XMLHttpRequest-Objekt ist nicht zu machen Cross-Domain, Cross-Protokoll erlaubt, oder Cross-Port-Anforderungen. Es gibt Möglichkeiten, wie Sie diese Einschränkung umgehen können, aber ich bin nicht sicher, würde ich das empfehlen.

Was ich tun würde, ist der Server als Proxy für sie zu worldpay veröffentlichen. dh. die Benutzer Beiträge zu Ihrem Server über Ajax die Form. Der Server führt alle notwendigen Manipulationen und erneut sendet das Formular worldpay, analysiert das Ergebnis und gibt das Ergebnis an den Client über Ajax.

  • Warum brauchen Sie es durch Ajax vom Client einreichen?
  • Warum brauchen Sie es auf Ihren Server zuerst einreichen?

Sie haben alle Arten von Domain-und Sandbox-spezifische Probleme auf dem Weg gehen Sie versuchen. Ich glaube nicht, es ist möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top