【问题标题】:success/error message keeps disappearing while submitting form提交表单时成功/错误消息不断消失
【发布时间】:2012-11-14 21:13:12
【问题描述】:

我有一个应用程序(editsessionadmin.php),用户在其中在相关文本输入中显示他们的评估名称、日期和时间。现在当用户提交时,它会显示一个确认,当用户确认时,然后通过使用ajax,它会导航到updatedatetime.php,它将在数据库中更新评估的时间和日期,并在editsessionadmin.php 页面的顶部。

但是我有一个小问题。

问题:使用 div 标记,我能够从 updatedatetime.php 脚本中检索更新后的错误或成功消息,并使用此 jquery 代码 $("#targetdiv").html(data)editsessionadmin.php 脚本中显示它。问题是,当用户提交表单时,它会显示消息,然后在提交表单后消息消失。我希望消息显示在editsessionadmin.php 页面的顶部而不是消失。为什么会消失?

下面是editsessionadmin.php的代码

        <script>

    function submitform() {    

    $.ajax({
        type: "POST",
        url: "/updatedatetime.php",
        data: $('#updateForm').serialize(),
        success: function(html){
            $("#targetdiv").html(html);
        }
     });        
}

         function showConfirm(){

          var examInput = document.getElementById('newAssessment').value;
          var dateInput = document.getElementById('newDate').value;
          var timeInput = document.getElementById('newTime').value;

          if (editvalidation()) {

         var confirmMsg=confirm("Are you sure you want to update the following:" + "\n" + "Exam: " + examInput +  "\n" + "Date: " + dateInput + "\n" + "Time: " + timeInput);

         if (confirmMsg==true)
         {
         submitform();   
     }
  }
} 

$('body').on('click', '#updateSubmit', showConfirm); 

            </script>   

        <h1>EDIT AN ASSESSMENT'S DATE/START TIME</h1>   

        <p>You can edit assessment's Date and Start time on this page. Only active assessments can be editted.</p>

        <div id="targetdiv"></div>

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" onsubmit="return validation();">
        <table>
        <tr>
        <th>Course: INFO101</th>
        <th>Module: CHI2513</th>
        </tr>
        </table>
        <p><input id="moduleSubmit" type="submit" value="Submit Course and Module" name="moduleSubmit" /></p>

        </form>


        ....


        <?php
        $editsession = "<form id='updateForm'>

        <p><strong>New Assessment's Date/Start Time:</strong></p>
        <table>
        <tr>
        <th>Assessment:</th>
        <td><input type='text' id='newAssessment' name='Assessmentnew' readonly='readonly' value='' /> </td>
        </tr>
        <tr>
        <th>Date:</th> 
        <td><input type='text' id='newDate' name='Datenew' readonly='readonly' value='' /> </td>
        </tr>
        <tr>
        <th>Start Time:</th> 
        <td><input type='text' id='newTime' name='Timenew' readonly='readonly' value=''/><span class='timepicker_button_trigger'><img src='Images/clock.gif' alt='Choose Time' /></span> </td>
        </tr>
        </table>
        <div id='datetimeAlert'></div>

<button id='updateSubmit'>Update Date/Start Time</button>


        </form>
        ";

        echo $editsession;


        }

        ?>

下面是updatedatetime.php的代码:

<?php

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }

echo 'sumbit successful';

$sessionname = (isset($_POST['Assessmentnew'])) ? $_POST['Assessmentnew'] : ''; 
$sessiondate = (isset($_POST['Datenew'])) ? $_POST['Datenew'] : ''; 
$sessiontime = (isset($_POST['Timenew'])) ? $_POST['Timenew'] : ''; 

$formatdate = date("Y-m-d",strtotime($sessiondate));
$formattime = date("H:i:s",strtotime($sessiontime));

$updatesql = "UPDATE Session SET SessionDate = ?, SessionTime = ? WHERE SessionName = ?";                                           
$update = $mysqli->prepare($updatesql);
$update->bind_param("sss", $formatdate, $formattime, $sessionname);
$update->execute();

echo 'update successful';

$query = "SELECT SessionName, SessionDate, SessionTime FROM Session WHERE SessionName = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s", $sessionname);
// execute query
$stmt->execute(); 
// get result and assign variables (prefix with db)
$stmt->bind_result($dbSessionName, $dbSessionDate, $dbSessionTime);
//get number of rows
$stmt->store_result();
$numrows = $stmt->num_rows();

echo 'select successful';

if ($numrows == 1){

echo "<span style='color: green'>Your Assessment's new Date and Time have been updated</span>";

}else{

echo "<span style='color: red'>An error has occured, your Assessment's new Date and Time have not been updated</span>";

}

        ?>

【问题讨论】:

  • @VIDesignz 发生的情况是,当我在确认中单击“确定”时,它会在页面提交时显示消息(您可以在浏览器选项卡上看到页面加载),当页面提交给自己,然后它就消失了。顺便说一句,我已经包括了分号,没有变化
  • @VIDesignz 这可能是问题所在。我只是想从updatedatetime.php 中检索回声,并通过运行$("#targetdiv").html(data); 将其放在targetdiv div 标记中。如果在页面加载时需要设置#targetdiv,那么这就是我出错的地方,应该设置什么?
  • @VIDesignz 尝试将数据更改为 html 但仍然做同样的事情
  • @VIDesignz 我不太习惯使用 ajax,我一直在尝试遵循我在研究中找到的某些示例,然后将其包含在代码中。如果您有更好的方法,那么如果您能展示一个更可靠和更清洁的方法,将不胜感激
  • @VIDesignz 我没有包含提交课程和模块按钮时的代码以尝试减少代码。你想让我把它包括进来吗?当您单击更新日期/开始时间按钮时会发生什么情况,然后它将显示确认框,如果用户在确认框中单击确定,那么它将提交表单(这是到它自己的页面)但同时页面正在加载它显示成功回显,然后当它被提交时,回显消息消失,回显消息应该在表单提交后显示并且提交后不会消失

标签: php jquery ajax


【解决方案1】:

好的,清理代码,执行表单提交,这就是 ajax 调用所需要的全部

function submitupdate() {    

    $.ajax({
        type: "POST",
        url: "/updatedatetime.php",
        data: $('#updateForm').serialize(),
        success: function(html){
            $("#targetdiv").html(html);
        }
     });        
}

这假设

/updatedatetime.php

正确计算并回显更新的成功或失败,

这是一个FIDDLE,向您展示表单本身所需的最低要求。您不需要在表单本身上放置任何方法或操作,只需表单标签即可。

至于提交按钮...你可以把它放在任何地方,做任何事情,只要确保你给它一个 ID 并附加一个点击处理程序来提交表单。

【讨论】:

  • 嗨,我已经更新了有问题的代码,我知道你使用了$('body').on('click', '#update', submitupdate);。我不知道我是否可以使用相同的东西,因为我想要做的是当用户点击“更新日期/开始时间”按钮时,它将通过验证功能(检查是否没有空文本输入),如果没有验证,则显示确认,我需要在代码中添加最后一小部分才能执行提交。目前,如果用户点击提交并确认确认,则不会出现消息
  • @user1819709 对于您的上述评论,请参阅此处jsfiddle.net/videsignz/4VVxs/7 记下 showconfirm() 函数,验证该函数内的输入。此外,不要使用 documentgetelementby id,而是使用 Jquery 简写。
  • 嗨,大问题,当我提交并确认时,它没有执行更新,或者显示回显,我已经更新了有问题的代码。
  • @user1819709 我会在你的 updatedatetime.php 中的每一步之后添加回声,以确保你的 php 没有中断。首先,我会在顶部放一个,这将确保您得到响应......即:echo 'sumbit successful';然后我会运行你的 php 并每隔几个步骤放置回声,例如 echo 'step 1 completed'; echo '第 2 步完成'
  • 好的,我会这样做,让你知道发生了什么
【解决方案2】:

您必须在 post call 中删除再次提交表单的行,并且该行恰好是 updateFormO.submit(); 。使用 post 方法进行 ajax 调用,然后在成功函数中再次重新提交表单。

【讨论】:

  • 请问在进行ajax调用时post方法应该是什么样子以确保它是正确的
  • post方法应该是这样的:$.post('updatedatetime.php', { Assessmentnew: $("#newAssessment").val(), Datenew:$("#Datenew").val(), Timenew: $("#Timenew").val() }, function(data) { $("#targetdiv").html(data); }); 我刚刚看到你不能使用serialize方法将数据发送到服务器。 serialize 方法非常适合 get 方法(.get 而不是 .post)。
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2012-01-11
  • 2016-10-11
  • 2017-11-17
相关资源
最近更新 更多