php - 对 AJAX 的基础知识感到困惑

标签 php javascript ajax

所以现在,我只是使用基本表单来检查密码。我希望它检查密码并基本上保留在 page.html 上,这样我就可以使用 JavaScript 来提醒不正确的密码或其他东西。我不太确定该怎么做。它似乎会带我到 check.php。我对整个过程不太确定,任何帮助表示赞赏!谢谢!

页面.html

<form action="check.php" method="post">
    <input type="password" name="password" />
    <input type="submit" value="Submit" />

</form>

检查.php

   <?php
    $password = $_POST['password'];
    if ( $password != "testing" ) {
        die();
    }
?>

最佳答案

PHP 在网络服务器上运行,而网络服务器通常在 物理上不同 的机器(服务器端)和网络浏览器运行的地方(客户端)运行。这些机器通常通过网络连接。 HTTP 是一种网络协议(protocol)。 Web 浏览器发送 HTTP 请求。 Web 服务器检索 HTTP 请求,其 URL 指示应将其转发给 PHP 以进行进一步处理。 PHP 检索 HTTP 请求并进行处理并返回 HTTP 响应。通常具有普通 HTML 页面的风格。网络服务器将 HTTP 响应发送回网络浏览器。

JavaScript 在网络浏览器上运行,对 PHP 一无所知,因为它在网络服务器上运行。 PHP 反过来也对 JavaScript 一无所知(尽管它可以生成一些 JS 代码,这些代码又会通过 HTTP 发送到网络浏览器)。 JS 和 PHP 之间唯一的通信方式是 HTTP。让 JS 触发 HTTP 请求并检索 HTTP 响应的方法之一是使用 XMLHttpRequest .这是 Ajax 背后的核心技术.

我在您的问题历史记录中看到您已经熟悉 jQuery .它是一个 JS 库,有很多方便的函数来触发 ajaxical 请求。在这种特定情况下,您想使用 $.post .例如

$('#formId').submit(function() {
    $.post('check.php', $(this).serialize(), function(valid) {
        if (valid) {
            alert('Valid!');
        } else {
            alert('Invalid!');
        }
    });
    return false; // Important! This blocks form's default action.
});

check.php 中:

<?php
    echo $_POST['password'] != "testing";
?>

但这不是 unobtrusive .如果用户禁用了 JS,则所有操作都将失败。最好的办法是在 PHP 中检查 ajaxical 请求是否被 jQuery 触发并进行相应处理:

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    // Ajax.
} else {
    // No ajax.
}

或者,您可以让 jQuery 也到达不同的 URL 或附加一个额外的参数。


更新:这是不使用 jQuery 时 JavaScript 的样子:

document.getElementById('formId').onsubmit = function() {
    var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            if (xhr.responseText) {
                alert('Valid!');
            } else {
                alert('Invalid!');
            }
        }
    }
    xhr.open('POST', 'check.php', true);
    xhr.send(serialize(this));
    return false; // Important! This blocks form's default action.
}

function serialize(form) {
    var query = '';
    for(var i = 0; i < form.elements.length; i++) {
        var e = form.elements[i];
        if (!e.disabled && e.name 
            && ((e.type != 'checkbox' && e.type != 'radio') || e.checked)
            && (e.type != 'submit' || e == document.lastClicked))
        {
            if (query.length) query += '&';
            query += e.name + '=' + encodeURIComponent(e.value);
        }
    }
    return query;
}   

document.onclick = function(e) {
    e = e || event;
    document.lastClicked = e.target || e.srcElement;
}

是的,臃肿冗长;)

关于php - 对 AJAX 的基础知识感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796750/

相关文章:

PHP MySQL 事务

javascript - PHP 脚本写入本地主机上的文件,但不写入 IIS 服务器上的文件

javascript - Firefox 链接到 javascript 函数会在不需要时打开一个新窗口

javascript - 如何在 PHP 和 Jquery 的帮助下使用 Chrome 扩展与数据库交互?

php - HipHop 而不是 XCache?

php - 调试 php.ini 语法错误

javascript - 根据时间值更改文本颜色php

javascript - 模块模式中的构造函数

php - 错误中的变量ajax + jquery

javascript - 使用ajax在对象中发布Json对象