2010-09-10 3 views
1

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

Но теперь я пытаюсь

  • AJAX опубликовать форму первого моего сайта (с использованием jquery.form, и эта часть работает отлично), а затем сделать некоторые операции
  • базы данных, а затем изменить атрибут action с помощью 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> 

Здесь я пропусканием Worldpay URL в качестве параметра

Аякса связывания

$(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); 


}); 

Я предполагаю, что ошибка происходит потому что я пытаюсь изменить a и представление в событии успеха формы 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 после успеха Аякса обработки формы. Должна ли форма быть unbinded? Пожалуйста помоги. У этого может быть простое решение, но я не могу его получить. Я много искал.

Обратите внимание
WorldPay платежный шлюз необходимо пользователю заполнить некоторые формы там после размещения, так что представление AJAX снова используя ajaxSubmit() не будет работать. Мне нужна нормальная форма.

Спасибо,
Sandeepan

ответ

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...

+0

Thats it! У меня есть все параметры post во время моего первого вызова AJAX, используя 'var posts = $ (this) .serialize();' и я могу развязать форму и отправить ее на worldpay тоже. Он отлично работает! Испытали ваше решение и наградили наградой. Не знал о 'e.preventDefault();', чтобы предотвратить обычную отправку формы. большое спасибо –

0

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

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

+0

еще такая же ошибка 'неперехваченного исключения: Разрешение отказано вызвать метод XMLHttpRequest.open' –

0

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

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

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

  • Зачем вам нужно отправить его через ajax с клиента?
  • Зачем вам сначала отправлять его на свой сервер?

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

+0

Я понимаю, что «объекту XMLHTTPRequest не разрешено выполнять междоменные, кросс-протокольные или кросс-портовые запросы». и я тоже не пытаюсь это сделать. Я сначала отправляю его с AJAX на свой собственный сервер (рабочий), затем пытаюсь сделать form.submit() в API (не работает). –

+0

Нужно ли сначала отвязать форму? Если так, вы можете мне сказать, как это сделать? Спасибо за ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^