1

这是一张要发布到 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支付网关需要用户在发布后在那里填写一些表格,所以再次使用AJAX提交ajaxSubmit()将不起作用。我需要一个正常的表单提交。

谢谢,
桑迪潘

4

3 回答 3

3

我没有使用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...

于 2010-09-17T22:22:22.343 回答
0

我不确定我为什么要按照自己的方式进行操作,但是在我看来 XMLHttpRequest 失败了,因为脚本只能将请求发回其原始服务器。

不允许 XMLHTTPRequest 对象进行跨域、跨协议或跨端口请求。有一些方法可以规避这个限制,但我不确定我是否会推荐。

我要做的是使用您的服务器作为将其发布到 worldpay 的代理。IE。用户通过 ajax 将表单发布到您的服务器。您的服务器会进行所有必要的操作并将表单重新提交给 worldpay,解析结果并通过 ajax 将结果返回给客户端。

  • 为什么需要从客户端通过ajax提交?
  • 为什么需要先提交到服务器?

您正在尝试解决各种域和沙箱特定问题。我不认为这是可能的。

于 2010-09-17T11:41:38.280 回答
0

如果您尝试更改表单的操作并在 AJAX 不成功的情况下重新提交它怎么办?例如,您可以setTimeoutsuccess回调中使用并在假设 1 秒后执行代码?

仅供参考:http ://www.w3schools.com/js/js_timing.asp

于 2010-09-14T07:56:51.327 回答