3

私は以下を使用して、Webアプリからサーバー側のphpとquickbaseの両方にフォームデータを投稿しています。fill.phpは署名を処理し、それをpdfに追加して、結果を電子メールで送信します。

この部分の実際の成功関数がないことを除いて、すべてが正常に機能します。

$('#sendbtn').click(function(){

    signatures();

    $.post( 'https://www.quickbase.com/db/dbname?act=API_AddRecord', $('form').serialize());

    $.post( 'fill.php', $('form').serialize(), $.mobile.changePage('#successpop', {transition: 'pop', role: 'dialog'}));

});

ポップアップが表示されますが、成功を示す真の指標ではありません。成功のポップアップを表示する前に、これらの投稿の一方または両方から応答を返すにはどうすればよいですか?成功したときに条件付きで一方の投稿からもう一方の投稿に移動するのは素晴らしいことですが、QuickBaseの投稿についてはそれほど心配していません。成功を表示する前に、fill.phpの投稿を確認する必要があります。

これについて私が気に入っているのは、アプリ外のURLへのリダイレクトを回避できることです。

助けてくれてありがとう!

<form action="" encoding='multipart/form-data' encType='multipart/form-data'>
<input type=text name=_fid_6 >
<input type=text name=_fid_7 >
<input type=text name=_fid_8 >
<input type="hidden" name="img" id="img" />
<input type="button" value="Sign!" id="sendbtn" />
</form>  

        <script>
            $(document).ready(function() {
                $("#signature").jSignature()
            })
            function signatures(){
                var $sigdiv = $("#signature");
                var datax = $sigdiv.jSignature("getData","image");
                $('#img').val(datax);
                $sigdiv.jSignature("reset")
            }
        </script>

<script>
$(document).ready( function(){
    $('#sendbtn').click(function(){

        signatures();

        $.post( 'https://www.quickbase.com/db/dbname?act=API_AddRecord', $('form').serialize());

        $.post( 'fill.php', $('form').serialize(), $.mobile.changePage('#successpop', {transition: 'pop', role: 'dialog'}));

    });
});
</script>

<div data-role="page" id="successpop">
<div data-role="header" data-theme="c">
<h1>QAF Sent</h1>
</div>
<div data-role="content" data-theme="d">    
<h2>Your QAF has been sent</h2> 
<p><input type="button" data-inline="true" data-theme="b" value="Begin New QAF" data-icon="back" onclick="clearForm();"/></p>
</div></div>
4

1 に答える 1

1

これらの$.post()の1つが最初に完了し、もう1つが2番目に完了します。どちらが最初の完了時にtrueに設定されているグローバル変数(ブール値など)を設定してから、trueのチェックを追加するかは必ずしもわかりません。値をtrueと見なす成功関数は、onDoubleSuccess()関数を呼び出す必要があります。そのように(デモ):

<script>
  $(document).ready( function(){
    $('#sendbtn').click(function(){
      var finishedFirstPost = false,
      onDoubleSuccess = function() {
        //code goes here
        $.mobile.changePage('#successpop', {transition: 'pop', role: 'dialog'});
      };
      signatures();
      $.post(
        'https://www.quickbase.com/db/dbname?act=API_AddRecord',
        $('form').serialize(),
        function() {
          if(finishedFirstPost) {
            onDoubleSuccess();
          } else {
            finishedFirstPost = true;
          }
        });
      $.post(
        'fill.php',
        $('form').serialize(),
        function() {
          if(finishedFirstPost) {
            onDoubleSuccess();
          } else {
            finishedFirstPost = true;
          }
        });
    });
  });
</script>

また、 CORSサポートなしで外部ドメインにHTTP POSTを実行することはできないため、Quickbase$.post()をに変更する必要があります$.get()。これは、このshoudlが機能することを示すAPIドキュメントです。

于 2012-12-19T18:33:09.863 に答える