【问题标题】:Unable to validate PHP empty() in AJAX form无法以 AJAX 形式验证 PHP empty()
【发布时间】:2018-11-16 11:24:12
【问题描述】:

我想用 PHP 验证表单输入。 Empty() 在我的 php 文件中没有返回任何结果(没有错误消息,表单提交)。该表格有效 - 它确实提交了该字段 - 但我可以提交一个空白字段。无论如何,AJAX 都会返回 success<?php echo $error;?> 抛出 unidentified variable 错误,因为 empty() 函数没有返回任何内容。我应该提一下,这是 3 个不同的文件。

PHP:

<?php
$error= ''; 
$title = '';

if(isset($_GET)) {

    if (empty($_GET['page_title'])) {
        $error= 'Name is required';
    } else {
        $title = $_GET['page_title'];
    }
}
?>

AJAX (Jquery)

$(function() {
$('form').submit(function(e) {
    e.preventDefault();
    $.ajax({
        method: 'GET',
        url: 'save_to_WP.php',
        data: {
            page_title: $('input[name="page_title"]').val()
        },
        success: function(e){
            alert('yay');
        },
        error: function(e) {
            alert('Error');
        }
    });
}); 

HTML

<form>
    <input type = "text" name="page_title" />
    <span class="error"><?php echo $error;?></span>
    <button type = "submit">Save</button>
</form>

我之前发布了这段代码,但我相信我所说的问题实际上是这个问题的症状。难怪我没有得到有效的答案,我问错了问题。

如果您有任何帮助或建议,我将不胜感激。

【问题讨论】:

  • PHP 代码不会发出任何输出,不会抛出任何错误,也不会真正执行任何事情。它有条件地设置一个变量,但从不使用该变量。根本没有迹象表明客户发生了任何事情。我不清楚您期望 AJAX 调用的结果是什么或为什么。我希望这个 PHP 代码总是能成功返回一个空白响应。
  • 当你var_dump($_GET)时会发生什么?
  • 如果要使用ajax错误,需要返回http错误码,例如500错误。
  • @David 该表单实际上是从外部来源(带有表单的页面)创建一个 WP 帖子。有两部分:输入字段和来自 Jquery 从页面获取元素的内容。这一切都很好 - 我只是想要一点验证(我们不是都......?)。为了调试,除了提交输入字段之外,我删除了所有内容,只是为了看看尝试提交空白字段是否会引发错误。
  • @crinkledMap: 好吧,1) JavaScript 中没有任何东西可以阻止表单提交,2) PHP 代码可能确实设置了 $error 变量,但它没有返回给客户端,因此客户端永远不会看到该文本,3)仅当服务器在响应中发回错误代码时才调用 AJAX error 回调(请参阅下面的另一个用户的答案),显示的代码不会这样做。您期望事情会在这里自动发生,但恐怕事实并非如此。对于这三个选项中的任何一个,您都需要编写代码来显式执行该操作。

标签: php jquery ajax validation


【解决方案1】:

您应该从服务器返回一个错误响应以触发 ajax jQuery 错误回调:

<?php
    $error= ''; 
    $title = '';

    if(isset($_GET)) {
        if (empty($_GET['page_title'])) {
            $error= 'Name is required';
            header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
            echo $error;
        } else {
            $title = $_GET['page_title'];
            echo 'ok!';
        }
    }

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 2023-03-11
    • 2014-07-29
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多