如何在按下“提交”按钮后刷新(更新)新数据的 HTML 页面


How to Refresh (Update) an HTML Page For New Data After the Submit Button is Pressed

>我有一个HTML表单,它分为三个主要组件。顶部实质上是用于显示杂志名称的标题。 此信息不会更改。

中间部分是通过MySQL查询开发的表格,用于在底部输入故事信息后将其显示为目录,这是数据输入屏幕。

底部是一个数据输入屏幕,用于输入有关杂志问题中包含的每个故事的信息。

输入数据并按下底部的提交按钮后,中间部分应通过 MySQL 查询进行更新,以反映新输入的故事。这并没有发生。

注意:为清楚起见,之前与此问题关联的代码已被删除。该解决方案与各种表单的调用方式相关联。我感谢Sulthan Allaudeen提供潜在的解决方案。目前,我不熟悉使用jquery-ajax。最终我需要学习。

因为 OP 想知道 jquery 和 ajax 是如何调用

步骤 1 :

识别输入

有一个带有类trigger的按钮

$(".trigger").click(function() 
{
//your ajax call here
}

步骤 2 :

触发您的 ajax 调用

$.ajax({
type: "POST",
url: "yourpage.php",
data: dataString,
cache: false,
success: function(html)
{
//your action
}
});

第 3 步 :

在您的成功函数中显示结果

$("#YourResultDiv").html(data);

为此,您应该创建一个名为 YourResultDiv 的div

注意:

在你的yourpage.php里面 你应该只打印表格,它将显示为输出

下面是在不离开当前页面的情况下显示提交表单的结果的简短示例。表单提交是在Ajax的帮助下完成的。每个表单都有自己的提交按钮,因此在onDocLoaded中循环匹配元素。

1. 空白.php表单提交到此脚本

<?php
echo "-------------------------------<br>";
echo " G E T - V A R S<br>";
echo "-------------------------------<br>";
var_dump( $_GET ); echo "<br>";
echo "-------------------------------<br>";
echo " P O S T - V A R S<br>";
echo "-------------------------------<br>";
var_dump( $_POST ); echo "<br>";
echo "<hr>";
if (count($_FILES) > 0)
{
    var_dump($_FILES);
    echo "<hr>";
}
?>

2. 空白.html包含 2 个表单,显示将其中任何一个提交到上述脚本的结果。

<!DOCTYPE html>
<html>
<head>
<script>
"use strict";
function byId(id,parent){return (parent == undefined ? document : parent).getElementById(id);}
function allByClass(className,parent){return (parent == undefined ? document : parent).getElementsByClassName(className);}
function allByTag(tagName,parent){return (parent == undefined ? document : parent).getElementsByTagName(tagName);}
function newEl(tag){return document.createElement(tag);}
function newTxt(txt){return document.createTextNode(txt);}
function toggleClass(elem, className){elem.classList.toggle(className);}
function toggleClassById(targetElemId, className){byId(targetElemId).classList.toggle(className)}
function hasClass(elem, className){return elem.classList.contains(className);}
function addClass(elem, className){return elem.classList.add(className);}
function removeClass(elem, className){return elem.classList.remove(className);}
function forEachNode(nodeList, func){for (var i=0, n=nodeList.length; i<n; i++) func(nodeList[i], i, nodeList); }
// callback gets data via the .target.result field of the param passed to it.
function loadFileObject(fileObj, loadedCallback){var reader = new FileReader();reader.onload = loadedCallback;reader.readAsDataURL( fileObj );}
function myAjaxGet(url, successCallback, errorCallback)
{
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function()
    {
        if (this.readyState==4 && this.status==200)
            successCallback(this);
    }
    ajax.onerror = function()
    {
        console.log("AJAX request failed to: " + url);
        errorCallback(this);
    }
    ajax.open("GET", url, true);
    ajax.send();
}
function myAjaxPost(url, phpPostVarName, data, successCallback, errorCallback)
{
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function()
    {
        if (this.readyState==4 && this.status==200)
            successCallback(this);
    }
    ajax.onerror = function()
    {
        console.log("AJAX request failed to: " + url);
        errorCallback(this);
    }
    ajax.open("POST", url, true);
    ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    ajax.send(phpPostVarName+"=" + encodeURI(data) );
}
function myAjaxPostForm(url, formElem, successCallback, errorCallback)
{
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function()
    {
        if (this.readyState==4 && this.status==200)
            successCallback(this);
    }
    ajax.onerror = function()
    {
        console.log("AJAX request failed to: " + url);
        errorCallback(this);
    }
    ajax.open("POST", url, true);
    var formData = new FormData(formElem);
    ajax.send( formData );
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
window.addEventListener('load', onDocLoaded, false);
function onDocLoaded()
{
    forEachNode( allByClass('goBtn'), function(elem){elem.addEventListener('click', onGoBtnClicked, false);} );
}
function onGoBtnClicked(evt)
{
    evt.preventDefault();
    var thisElem = this;
    var thisForm = thisElem.parentNode;
    myAjaxPostForm('blank.php', thisForm, onPostSuccess, onPostFailed);
    function onPostSuccess(ajax)
    {
        byId('tgt').innerHTML = ajax.responseText;
    }
    function onPostFailed(ajax)
    {
        //byId('tgt').innerHTML = ajax.responseText;
        alert("POST FAILED!!!!");
    }
    return false;
}
</script>
<style>
#page
{
    display: inline-block;
    border: solid 1px gray;
    background-color: rgba(0,0,0,0.2);
    border-radius: 6px;
}
.controls, .tabDiv
{
    margin: 8px;
    border: solid 1px gray;
    border-radius: 6px;
}
.tabDiv
{
    overflow-y: hidden;
    min-width: 250px;
    background-color: white;
    border-radius: 6px;
}
.tabDiv > div
{
    padding: 8px;
}
</style>
</head>
<body>
<div id='page'>
    <div class='tabDiv' id='tabDiv1'>
        <!-- <div style='padding: 8px'> -->
        <div>
            <form id='mForm' enctype="multipart/form-data" >
                <label>Name: </label><input name='nameInput'/><br>
                <label>Age: </label><input type='number' name='ageInput'/><br>
                <input type='file' name='fileInput'/><br>
                <button class='goBtn'>GO</button>
            </form>
        </div>
    </div>
    <div class='tabDiv' id='tabDiv2'>
        <!-- <div style='padding: 8px'> -->
        <div>
            <form id='mForm' enctype="multipart/form-data" >
                <label>Email: </label><input type='email' name='emailInput'/><br>
                <label>Eye colour: </label><input name='eyeColourInput'/><br>
                <label>Read and agreed to conditions and terms: </label><input type='checkbox' name='termsAcceptedInput'/><br>
                <button class='goBtn'>GO</button>
            </form>
        </div>
    </div>
<!--    <hr>    -->
    <div class='tabDiv'>
        <div id='tgt'></div>
    </div>
</div>
</body>
</html>

刷新表单以显示新数据的添加的解决方案是通过以下行重新调用它:"include("new_stories.inc.php");"。此行在表单的数据输入部分中的MySQL插入代码之后立即执行。

表单"new_stories.inc.php"(目录)的中间部分查询MySQL数据库以检索与当前杂志问题相关的故事信息。重新调用表单等效于重新查询。