2016-04-21 28 views
0

所以我在这里问过类似的问题,然后得到了一个有效的答案,但是,在我的初学者项目和ajax的介绍进展后,我遇到了另一个问题。看起来,AJAX调用不成功..页面重新加载后。在将更多文本字段添加到我的表单之前,我注意到了这个问题,但我无法想象这可能是如何相关的。后来的查询依赖于表单是否成功提交,但我不想让用户刷新页面,只是为了将数据实际推送到数据库。有什么建议么?jQuery 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> 

..Later在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

'数据= { '动作':clickBtnValue};'应该只是'数据= {动作:clickBtnValue};' – larsAnders

+0

你看了在AJAX请求/响应浏览器的开发者工具?是否有错误报告?你在网络服务器上运行这个吗? –

+0

你有一个表单提交按钮,然后你也通过ajax提交。这是多余的。如果你不希望页面刷新,那么你可以杀死表单,但留下输入字段,将信息收集到数据对象中,并通过ajax发布。没有必要的表格。 – nurdyguy

回答

0

我有点生疏所以裸陪我,但我认为你忘记了AJAX是异步的,这意味着在那里发生的事情直到后来才会发生。

因此,在您的示例中,您完成了AJAX调用,然后检查了会话,然后调用完成了其功能(由于发送的数据量更高而花费更长时间)。这就是为什么刷新后会看到新的价值。

你有3个选择这里:

  1. 附上//do something声明到您的success功能。

代码示例:

$.post(ajaxurl, data, function (response) { 
    alert("Account Created"); 

    if ($_SESSION['submitted'] == true){ 
     // do something 
    } 
}); 
  • 创建函数和调用在你success函数的末尾。
  • 代码示例:

    function sessionCheck(){ 
        if ($_SESSION['submitted'] == true){ 
         // do something 
        } 
    } 
    
    .... 
    
    $.post(ajaxurl, data, function (response) { 
        alert("Account Created"); 
    
        sessionCheck(); 
    }); 
    
  • 给您$(document)一个.ajaxsuccess(function)。这会触发,每次你有一个Ajax调用完成。 请注意,这可能会覆盖它们的多个实例在这种情况下,您必须为每个.php输出添加一个识别会话变量。
  • 代码示例

    $(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) 
    });