用AJAX显示PHP错误。如果没有错误,则显示PHP函数的输出
好吧,这可能是超级简单,但我已经打破了我的头在这一整天,我不能让它工作 我有一个页面,显示mysql查询中的用户列表。在此页面上,还可以添加用户。为此,我将向process.php发送一个AJAX调用,该调用执行一些验证,如果有错误,则发送一个错误。如果没有错误,我希望AJAX更新页面用AJAX显示PHP错误。如果没有错误,则显示PHP函数的输出,php,jquery,ajax,Php,Jquery,Ajax,好吧,这可能是超级简单,但我已经打破了我的头在这一整天,我不能让它工作 我有一个页面,显示mysql查询中的用户列表。在此页面上,还可以添加用户。为此,我将向process.php发送一个AJAX调用,该调用执行一些验证,如果有错误,则发送一个错误。如果没有错误,我希望AJAX更新页面 问题是,如果没有错误(已添加用户),我希望返回更新的userlist。这意味着存储my getUsers()的输出;数组中的函数,这是不可能的 我怎样才能做到这一点 p、 我意识到这是蹩脚的代码,我应该使用OOP
问题是,如果没有错误(已添加用户),我希望返回更新的userlist。这意味着存储my getUsers()的输出;数组中的函数,这是不可能的 我怎样才能做到这一点 p、 我意识到这是蹩脚的代码,我应该使用OOP/PDO,但这不适用于生产环境,它可以工作。所以我暂时就这样不谈了 users.php
<article>
<ul>
<?php getUsers(); ?>
</ul>
</article>
<form id="addUserForm">
...
<input type="hidden" name="addUser">
</form>
$("#addUserForm").on("submit",function() {
event.preventDefault();
var data = $("#addUserForm").serialize();
$.ajax({
type: "POST",
url: "process.php",
data: data,
dataType: "json",
success: function(response) {
if (response.success) {
$("article ul).html(response.data);
} else {
$(".errorMessage).html("<p>" + response.error + </p>");
}
}
});
});
我就是这样做的:
try{dataObj = eval("("+response+")");}
catch(e){return;}
alert(dataObj->example_key);
您是想获取ajax返回的错误,还是想要自定义错误?(例如,php脚本返回的字符串)。如果您指的是ajax错误,您应该有以下信息: 编辑:因为您提到,您希望process.php返回一个自定义错误
if (isset($_POST["addUser"]))
{
... // Serialize data
if (empty ...)
{
$responseArray = ["success" => false, "error" => "Fields cannot be empty"];
echo json_encode($responseArray);
}
// If user is successfully added to database, send updated userlist to AJAX
if (addUser($email, $password))
{
$responseArray = ["success" => true, "data" => getUsers();];
echo json_encode($responseArray)
}
}
if (isset($_POST["addUser"]))
{
... // Serialize data
if (empty ...)
{
$responseArray = ["success" => false, "error" => "Fields cannot be empty"];
echo json_encode($responseArray);
}
// If user is successfully added to database, send updated userlist to AJAX
if (addUser($email, $password))
{
$responseArray = ["success" => true, "data" => getUsers();];
echo json_encode($responseArray)
}else{
echo 1;
}
//I added else echo 1;
}
Process.php
if (isset($_POST["addUser"]))
{
... // Serialize data
if (empty ...)
{
$responseArray = ["success" => false, "error" => "Fields cannot be empty"];
echo json_encode($responseArray);
}
// If user is successfully added to database, send updated userlist to AJAX
if (addUser($email, $password))
{
$responseArray = ["success" => true, "data" => getUsers();];
echo json_encode($responseArray)
}
}
if (isset($_POST["addUser"]))
{
... // Serialize data
if (empty ...)
{
$responseArray = ["success" => false, "error" => "Fields cannot be empty"];
echo json_encode($responseArray);
}
// If user is successfully added to database, send updated userlist to AJAX
if (addUser($email, $password))
{
$responseArray = ["success" => true, "data" => getUsers();];
echo json_encode($responseArray)
}else{
echo 1;
}
//I added else echo 1;
}
您的ajax将是:
$("#addUserForm").on("submit",function() {
event.preventDefault();
var data = $("#addUserForm").serialize();
$.ajax({
type: "POST",
url: "process.php",
data: data,
dataType: "json",
success: function(response) {
if(response != 1){
$("article ul").html(response.data);
}else{
alert('Custom error!');
}
},
error: function(jqXhr, textStatus, errorThrown){
console.log(errorThrown);
}
});
});
顺便说一句,如果(addUser($email,$password))您的getUsers()函数正在打印数据,并且没有将数据返回到json connstuctor,那么您发布的代码中缺少)
function getUsers()
{
global $db;
$query = mysqli_query($db, "SELECT * FROM users");
while($row = mysqli_fetch_assoc($query))
{
echo "<li>" . $row["user_firstname"] . "</li>";
}
}
用“)”关闭它。如果您想要捕获
getUsers
函数的输出,则无需更改当前行为。在成功的输出变化
$responseArray = ["success" => true, "data" => getUsers();];
echo json_encode($responseArray)
到
这样做的目的是捕获输出并将其存储到可变的$usersList
中,然后可以将其作为字符串返回
最好将用户作为数组返回,并在客户端IMO上生成标记,但这取决于您。这只是另一种让你的东西发挥作用的方式
有关php输出缓冲区的更多信息您可以使用try/catch块捕获错误,并在出现php错误时对其进行处理。这将适用于除致命PHP错误以外的所有错误。“这意味着将my getUsers()函数的输出存储在数组中,这是不可能的。”。为什么不可能呢?您似乎已经在您的process.php示例中完成了这项工作。我将它作为我尝试完成的一个示例。代码不起作用,我没有真正理解这个问题。只需从getUsers返回一个html字符串,而不是直接在函数中打印它。或者返回一个数组以将其包含在结构化变量中。“不工作”的确切含义是什么?PHP错误?JS错误?另外,如果您只添加了一个用户,为什么不直接返回已添加用户的完成数据呢?然后,您可以将其添加到页面上现有的用户列表中,而不是刷新整个页面。根据惯例,这基本上就是大多数这类CRUDAPI所做的。我试图返回一个由process.php返回的自定义错误。目前,我实际上是通过echo'ing header(“HTTP/1.0 500”)使用$.ajax error:函数,但这似乎是一个比我尝试的更糟糕的解决方案。语法错误是由于将其粘贴到StackOverflow编辑器中引起的。问题是,这只显示了一个自定义错误,而不是PHP返回的内容,对吗?我回家后会查看您的答案。谢谢。语法错误是由于粘贴到StackOverflow编辑器中引起的。我回家后会看看你的答案。谢谢
$responseArray = ["success" => true, "data" => getUsers();];
echo json_encode($responseArray)
ob_start();
getUsers();
$usersList = ob_get_clean();
$responseArray = ["success" => true, "data" => $usersList];
echo json_encode($responseArray)