Jquery - невозможно динамически изменить действие формы и отправить его в событие успеха ajaxForm () - PullRequest
1 голос
/ 10 сентября 2010

Это форма оплаты, которую необходимо разместить на платежном шлюзе Worldpay. Он имеет все параметры в соответствии с документацией WorldPay и отлично работает, если напрямую опубликован.

Но сейчас я пытаюсь

  • AJAX сначала опубликует форму на моем сайте (используя 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 требует, чтобы пользователь заполнил некоторые формы после публикации, поэтому повторная отправка AJAX с использованием ajaxSubmit() не будет работать. Мне нужна нормальная подача формы там.

Спасибо
Sandeepan

Ответы [ 3 ]

3 голосов
/ 18 сентября 2010

Я не использую плагин 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...

0 голосов
/ 17 сентября 2010

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

Объект XMLHTTPRequest не может делать кросс-доменные, кросс-протокол или кросс-портовые запросы.Существуют способы обойти это ограничение, но я не уверен, что рекомендую это сделать.

Я бы использовал ваш сервер в качестве прокси-сервера для публикации его в worldpay.то есть.пользователь отправляет форму на ваш сервер через ajax.Ваш сервер выполняет все необходимые манипуляции и повторно отправляет форму в worldpay, анализирует результат и возвращает результат клиенту через ajax.

  • Почему вам нужно отправить его через клиент с помощью ajax?
  • Почему вам нужно сначала отправить его на ваш сервер?

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

0 голосов
/ 14 сентября 2010

Что делать, если вы попытаетесь изменить действие формы и повторно отправить его не в случае успеха AJAX?Например, вы можете использовать setTimeout в success обратном вызове и сделать код, скажем, через 1 секунду?

Просто для справки: http://www.w3schools.com/js/js_timing.asp

...