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() 将首先完成,一个将在第二个完成。您不一定知道在第一个完成时设置为 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(). 这是显示这应该有效的API 文档。

于 2012-12-19T18:33:09.863 回答