这是要发布到Worldpay付款网关的付款表格。它具有WorldPay文档中的所有参数,如果直接发布,则可以正常工作。

但是,现在我正在尝试


AJAX首先将表单发布到我的网站(使用jquery.form,并且那部分工作正常),然后执行一些数据库操作
然后使用javascript更改action属性并将其发布到Worldpay。但是worldpay帖子不起作用,以下代码中$("form#wpftuf").submit();行之后发出警报的任何内容也不会发出警报。


付款表格

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


在这里,我将worldpay URL作为参数传递

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


 });


我猜该错误正在发生,因为我试图更改操作并在ajax表单的成功事件中提交,并且表单仍为binded
因此,我尝试将$("form#wpftuf").unbind(options);$("form#wpftuf").unbind(); $("form#wpftuf").unbind(ajaxForm);盲目地放在$("form#wpftuf").attr("action",worldpayUrl);行之后(一个接一个),但是在所有情况下,我都会收到此错误uncaught exception: Permission denied to call method XMLHttpRequest.open

ajax表单处理成功后,如何动态地向Worldpay提交表单。表格需要先为unbinded吗?请帮忙。这可能有一个简单的解决方案,但我无法解决。我搜了很多。

请注意
worldpay付款网关在发布后需要用户在此处填写一些表格,因此再次使用ajaxSubmit()提交AJAX无效。我需要在那里提交常规表格。

谢谢,
桑迪潘

最佳答案

我没有使用malsup插件,但是如果我是对的,那么您的问题是.submit();当您使用带有表单的Ajax请求时,通常它将被设置为不执行任何操作return false;,所以当您提交它时,它仍然被阻止!

您的代码应如下所示:

更新

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


实质上使用此$("#wpftuf").unbind('submit').submit(); //submit it...

08-19 19:02