4

これが以前に尋ねられた場合は申し訳ありませんが、フォーム送信と、送信をクリックすると起動する ajax 呼び出しの両方でフォーム データを送信する必要があります。その理由は、ユーザーがリダイレクトされ、det formdata を事前にデータベースに保存したいからです。

だから私はフォームデータを送信するjavascript関数のonsubmitとfireのフォームを使用しようとします。これは機能せず、フォームが送信され、ajax 呼び出しは行われません。したがって、関数から ajax 呼び出しを取り出して、それが機能するかどうかを確認しようとすると、ページの更新時に ajax 呼び出しが行われ、データベースが更新されます。

いくつかのコードは次のとおりです。

HTML

<form id="danlevi" onsubmit="return senddata()" action='<?php echo esc_url( get_option( 'shopping_cart_url' ) ); ?>' method='post' enctype="multipart/form-data">
  <input type="text" name="first" />
  <input type="text" name="last" />
  <input type="text" name="e-mail" />
  <input type="text" name="phone" />
  <input type="text" name="street" />
  <input type="text" name="zip" />
  <input type="submit" value="send" />
</form>

JavaScript

jQuery(document).ready(function() {
  function senddata() {
    var formdata = jQuery("#danlevi").serialize();
    var decoded = decodeURIComponent(formdata);
    strip = decoded.replace(/[\[\]]/g, "_");
    alert(strip);
    jQuery.ajax({
      type: "POST",
      url: 'dev/wp-content/themes/twentythirteen/custom/process_address.php',
      data: strip,
    });
  }
});

これが機能しない理由がわかりません。私が望むのは、ajax呼び出しが行われるまでページが待機することです。完了したら、通常どおりフォームを送信します。

return false を使用すると、機能します。誰かが私が明らかに間違っていることを説明し、これを行う方法を教えてくれることを願っています. このコードに表示されるアラートは、デバッグ用です。

4

1 に答える 1

2

ajax が完了するまで待ってから、フォームを送信します。

   jQuery(document).ready(function() {
      function senddata() {
        var formdata = jQuery("#danlevi").serialize();
        var decoded = decodeURIComponent(formdata);
        strip = decoded.replace(/[\[\]]/g, "_");
        alert(strip);
        jQuery.ajax({
          type: "GET",
          url: 'dev/wp-content/themes/twentythirteen/custom/process_address.php',
          data: strip,
          complete: function(){
              jQuery("#danlevi").submit(); //submit the form after ajax completes
          }
        });
        return false; //stop the form from initially submitting
      }
    });
于 2013-10-02T03:29:53.817 に答える