JQuery - не в состоянии динамически изменять действие формы и отправить его в событие успеха AjaxForm ()

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

Вопрос

Это форма оплаты, которая должна быть размещена на платежном шлюзе 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 от клиента?
  • Почему вы должны сначала отправлять его на свой сервер?

У вас есть все виды домена и специфических проблем с песочницей, которые вы пытаетесь. Я не думаю, что это возможно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top