无法以 AJAX 形式验证 PHP empty()

Posted

技术标签:

【中文标题】无法以 AJAX 形式验证 PHP empty()【英文标题】:Unable to validate PHP empty() in AJAX form 【发布时间】: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 回调(请参阅下面的另一个用户的答案),显示的代码不会这样做。您期望事情会在这里自动发生,但恐怕事实并非如此。对于这三个选项中的任何一个,您都需要编写代码来显式执行该操作。 【参考方案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!';
        
    

?>

【讨论】:

以上是关于无法以 AJAX 形式验证 PHP empty()的主要内容,如果未能解决你的问题,请参考以下文章

使用触发 javascript 验证的 POST 表单和 AJAX 登录到 PHP 文件。无法将数据存储到 PHP

以php形式验证手机号码

PHP生成各种验证码和Ajax验证

干货Ajax技术连载二-Ajax 验证账号是否存在

无法以角度反应形式添加验证器

IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典案例