无法以 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()的主要内容,如果未能解决你的问题,请参考以下文章