这是要发布到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...