jQuery AJAX调用失败直到刷新后

时间:2016-04-21 20:27:34

标签: php jquery ajax

所以我之前在这里问了一个类似的问题并得到了一个有效的答案,然而,在我的初学者项目和ajax介绍进展之后,我遇到了另一个问题。在重新加载页面之后,似乎AJAX调用没有成功。我在向表单添加更多文本字段之前注意到了这个问题,但我无法想象它是如何相关的。稍后的查询依赖于表单是否已成功提交,但我不想让用户刷新页面,只是为了将数据实际推送到数据库。有什么建议吗?

    <form action="call.php" method="post">
    <input class="oomText" type="text" name="accountName" placeholder="Account Name"><br>
    <h2 class="oomHead2">Email Notifcations For Phone Calls</h2>
    <input class="oomText" type="text" name="accountEmailOne" placeholder="Email Recipient 1*"><br>
    <input class="oomText" type="text" name="accountEmailTwo" placeholder="Email Recipient 2*"><br>
    <input class="oomText" type="text" name="accountEmailThree" placeholder="Email Recipient 3*"><br>
    <h2 class="oomHead2">Text Notifcations For Phone Calls</h2>
    <input class="oomText" type="text" name="accountTextOne" placeholder="Text Recipient 1*"><br>
    <input class="oomText" type="text" name="accountTextTwo" placeholder="Text Recipient 2*"><br>
    <input class="oomText" type="text" name="accountTextThree" placeholder="Text Recipient 3*"><br>
    <small>*Fields are <b>not</b> required to be filled out</small><br>
    <input class="oomButton submit" type="submit" name="submit" value="submit">
    <script>
        $(document).ready(function(){
            $('.oomButton.submit').click(function(){
                var clickBtnValue = $(this).val();
                var ajaxurl = 'http://clients.oomdo.com/provision/ajax.php',
                data =  {'action': clickBtnValue};
                $.post(ajaxurl, data, function (response) {
                 alert("Account Created");
                });
            });
        });
    </script>
    </form>

..稍后在php文件中

  if ($_SESSION['submitted'] == true){
   // do something
    }

ajax.php

    <?php
        session_start();
        if (isset($_POST['action'])) {
            switch ($_POST['action']) {
                case 'submit':
                    submit();
                    echo 'Hurrah';
            }
        }

        function submit() {
            $_SESSION['submitted'] = true;
        }

    ?>

1 个答案:

答案 0 :(得分:1)

我认为您已经忘记了AJAX是异步的,这意味着直到稍后才会发生这种情况。

因此,在您的示例中,您已完成AJAX调用,然后检查了您的会话,然后调用完成了其功能(由于发送的数据量较大,所以需要更长的时间)。这就是它在刷新后看到新值的原因。

这里有3个选项:

  1. //do something语句包含在success函数中。
  2. 代码示例:

    $.post(ajaxurl, data, function (response) {
        alert("Account Created");
    
        if ($_SESSION['submitted'] == true){
            // do something
        }
    });
    
    1. 创建一个函数,并在success函数的末尾调用该函数。
    2. 代码示例:

      function sessionCheck(){
          if ($_SESSION['submitted'] == true){
              // do something
          }
      }
      
      ....
      
      $.post(ajaxurl, data, function (response) {
          alert("Account Created");
      
          sessionCheck();
      });
      
      1. $(document) .ajaxsuccess(function)提供帮助。每次完成ajax调用时,都会触发此操作。 请注意,多个此类实例可能会覆盖它们 在这种情况下,您必须为每个.php输出添加一个标识会话变量。
      2. 代码示例

        $(document).ajaxSuccess(function() {
        
            if ($_SESSION['submitted'] == true){
                //    do something
                //then find a way to remove $_SESSION['submitted']
                //        maybe using AJAX as well.
            }
        
            //else if ($_SESSION['somethingElse'] == true)
        });