0

そのため、「完成した」HTMLフォームの値をカスタム DATAオブジェクトに変換して、さまざまな js.functions で使用できるようにしました。これは、オブジェクトの前に DATAオブジェクトパラメータの値を更新する場合と更新しない場合があります。フォームデータが最終的に (paypal に) 送信される前に、データベース操作のために最終的に PHP に (ajax 経由で) 渡されます。

もちろん、フォームを送信する方法と、オブジェクトを AJAX 経由で POST データとして渡す方法は知っていますが、停止する代わりに DATA オブジェクトを (再び、payapl に) 投稿する方法または可能性があるかどうか疑問に思っています。フォーム自体の入力値を更新する途中で、フォームを送信できるようにします。何かのようなもの...

<script>
data = {};
data.type ='form';
data.method ='post';
data.action ='https://www.sandbox.paypal.com/cgi-bin/webscr';
data.foo = 'foo';
data.bar = 'bar';
jQuery('#btn').click(function(){ jQuery('#form').submit(); });
jQuery('#post_data').click(function(){ data.submit();/*duh....???*/ });
</script>

<form id='data' action='https://www.sandbox.paypal.com/cgi-bin/webscr' method='post'>
    <input type='text' name='foo' value='foo' />
    <input type='text' name='bar' value='bar' />
</form>
<input type='button' id='btn' value='Submit'>
<input type='button' id='post_data' value='Post Data'>

もちろん、これは機能しません...;-(

4

1 に答える 1

0

Marc B が 1 つのコメントで述べたように、通常のオブジェクトを に渡すだけでjQuery.post、サーバーに送信されるときに「シリアル化」されます。サーバーからの応答を取得し、フォームで送信することは別の問題です。実際、「データベース操作のための PHP」は、渡されたものと同じフィールドを持つ JSON オブジェクトを返すと思います。

したがって、送信するだけdataで簡単です。jQuery.post('yourDatabaseManipulation.php', data); これには、結果を処理するためのコールバックがありません...ハンドルを試行すると、次のややクレイジーなコードが生成されます。

jQuery('#post_data').click(function() {
  var $form = jQuery(this).parents('form');

  jQuery.post('yourDatabaseManipulation.php', data).done(function(validatedData) {

    // returned values: fill into form before submit
    for (key in validatedData) {
      // special cases need extra attention
      if (key == 'action' || key == 'method') {
        $form.attr(key, validatedData[key]);
      } else if (key == 'type') {
        // no idea what to do with this one, so ignore it
      } else {
        // everything else should have a input field in the form
        // or it will just be dropped
        // FIXME: we trust our server response not to do some nasty XSS via keys here
        var $field = jQuery("input[name='"+key+"']", $form);
        $field.val(validatedData[key]);
      }
    }
    $form.submit();

  }).fail( function(jqXHR, textStatus, errorThrown) {
      // our very sophisticated error handling
      alert('fail '+textStatus);
  });

});

これは から取得した値を取得しyourDatabaseManipulation.php、ユーザーが入力したすべての値を「検証済み」の値 (おそらく別のフォーム アクションを含む) で上書きしてから、フォームを送信する必要があります。あなたがそうしたかったかどうかはわかりませんが、そこからあなたが本当にやりたかったことを見つけていただければ幸いです。

編集<form>:上記のコードは、テスト時に自動的に行った送信ボタンを の中に移動した場合にのみ機能することがわかりました。それをしたくない場合は、フォームを保持する変数を別の方法で初期化します。var $form = jQuery('#data')

于 2013-02-06T23:41:09.810 に答える