1

我想通过 php ajax 提交一个表单并试图保持简单,但它们不可避免地很复杂。

pageA.php只是一种形式。

pageB.php正在验证和处理代码。在我创建的这个页面的顶部,$_SESSION['message'] = "";如果有问题,在页面的末尾可能是$_SESSION['message'] = "Password is too short";- 例如。我想在pageA.phpdiv 内显示此消息#message

会话在两个页面的顶部开始(session_start();
pageA我还有一个微调器 gif,默认情况下是隐藏的(display:none;),但它应该在(并且只是在)表单处理期间可见。

pageA.php

<form id="formReg" action="pageB.php" method="post">
. . .  
</form>
<img id="spinn" src="spinn.gif" />
<div id="message"></div>
<button id="sub">Register</button>

JS 在底部pageA

$("#sub").click( function() {
    $("#spinn").show(); // it seems this works, but very shortly
    $.post( $("#formReg").attr("action"), $("#formReg").serialize()); // this works (data are stored in the table).
    $("#formReg :input").val(''); //this works
    $("#spinn").hide();
    $("#message").html($_Session["message"]); // doesn't work, of course.
});

pageB.php我的底部有:
header("Location: pageA.php");,以保持访问者pageA

4

1 回答 1

2

第一:表单提交后应该发生的所有动作都必须放在传递给的回调函数中$.post()。AJAX 函数立即返回,因此微调器将在显示后不久被隐藏。像这样做:

$.post(
    $("#formReg").attr("action"), $("#formReg").serialize(), 
    function(data, textStatus, jqXHR) {
        $("#spinn").hide();
        // Message display code - see below
    }
);

这样,回调函数中的代码会在发布请求返回后立即执行,而不是在$.post调用返回后执行(它只是启动请求,但不等待它完成)。

关于显示消息:您pageB.php不必重定向,因为它仅通过 AJAX 调用。pageA.php所以客户端的浏览器打开后永远不会离开。AJAX 调用是一个单独的 HTTP 请求,不会影响当前打开的页面。要返回该值,您必须简单地输出它pageB-data上面定义的回调函数的参数将包含它。如果您想保持简单,只需执行以下操作:

// in pageB.php
echo $_SESSION['message'];

// In your JS callback
function(data, textStatus, jqXHR) {
    // "data" contains the output of pageB.php
    $("#message").html(data);
}

如果您需要将多个项目传递给 AJAX 回调,请查看JSON

于 2013-01-13T03:32:25.043 回答