JQuery - не в состоянии динамически изменять действие формы и отправить его в событие успеха AjaxForm ()
Вопрос
Это форма оплаты, которая должна быть размещена на платежном шлюзе WorldPay. У него есть все параметры в соответствии с документацией WorldPay, и она работает нормально, если прямо размещено.
Но сейчас я пытаюсь
- Аякс сначала опубликует форму на мой сайт (используя jquery.form, и эта часть работает нормально), а затем выполните некоторые операции базы данных
- А затем измените атрибут действий, используя JavaScript и опубликуйте его в 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>
Здесь я передаю URL WorldPay в качестве параметра
Связывание 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
Как я могу придать форму динамично для WorldPay после успеха обработки формы AJAX. Должен ли форму быть unbinded
первый? Пожалуйста помоги. Это может иметь простое решение, но я не могу его получить. Я много искал.
Пожалуйста, обрати внимание
WorldPay Payment Gateway нуждается в пользователю, чтобы заполнить некоторые формы там после публикации, поэтому подача Ajax снова использует ajaxSubmit()
не будет работать. Мне нужна нормальная подача формы там.
Спасибо,
Sandeepan
Решение
Я не использую плагин 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...
Другие советы
Что, если вы попытаетесь изменить действие формы и повторно отправить его не в успехе Ajax? Например, вы могли бы использовать setTimeout
в success
Обратный вызов и сделайте код после скажем, что 1 секунду?
Только для справки: http://www.w3schools.com/js/js_timing.asp.
Я не уверен.
Объект XMLHTTPREQUEST не разрешается делать перекрестные, кросс-протокол или перекрестные запросы. Есть способы, которыми вы можете обойти это ограничение, но я не уверен, что рекомендую это.
Что я бы сделал, это использовать ваш сервер в качестве прокси для публикации его в WorldPay. т.е. Пользователь публикует форму на свой сервер через AJAX. Ваш сервер делает все необходимые манипуляции и повторяет форму для WorldPay, разрабатывает результат и возвращает результат к клиенту через AJAX.
- Почему вам нужно представить его через AJAX от клиента?
- Почему вы должны сначала отправлять его на свой сервер?
У вас есть все виды домена и специфических проблем с песочницей, которые вы пытаетесь. Я не думаю, что это возможно.