1

これは、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>

ここでは、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。だから、私は盲目的に、行の後に(1つずつ)入れてみまし$("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ペイメントゲートウェイでは、投稿後にユーザーがフォームに入力する必要があるため、を使用したAJAX送信は機能しajaxSubmit()ません。そこで通常のフォーム送信が必要です。

ありがとう、
Sandeepan

4

3 に答える 3

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

于 2010-09-17T22:22:22.343 に答える
0

フォームのアクションを変更して、AJAXが成功しなかった場合に再送信しようとするとどうなりますか?たとえば、コールバックで使用setTimeoutsuccessて、たとえば1秒後にコードを実行できますか?

参考までに:http ://www.w3schools.com/js/js_timing.asp

于 2010-09-14T07:56:51.327 に答える
0

なぜあなたがそれをやりたいのかわかりませんが、スクリプトは元のサーバーにのみリクエストを返すことができるため、XMLHttpRequestが失敗しているように見えます。

XMLHTTPRequestオブジェクトは、クロスドメイン、クロスプロトコル、またはクロスポートのリクエストを行うことはできません。この制限を回避する方法はいくつかありますが、それをお勧めするかどうかはわかりません。

私がすることは、worldpayに投稿するためのプロキシとしてサーバーを使用することです。すなわち。ユーザーはajaxを介してフォームをサーバーに投稿します。サーバーは必要なすべての操作を行い、フォームをworldpayに再送信し、結果を解析して、ajaxを介してクライアントに結果を返します。

  • なぜクライアントからajaxを介して送信する必要があるのですか?
  • なぜ最初にサーバーに送信する必要があるのですか?

あなたはあなたがしようとしている途中で起こっているあらゆる種類のドメインとサンドボックス特有の問題を抱えています。それは不可能だと思います。

于 2010-09-17T11:41:38.280 に答える