如果PHP脚本在某处失败,有没有办法让PHP返回AJAX错误代码? 我正在关注一个教程并将其输入我的PHP:
$return['error'] = true; $return['msg'] = "Could not connect to DB";
一切都很好,直到我意识到它是JSON数据。有没有办法使用标准的$ _POST返回错误并返回HTML数据(如,触发jQuery的AJAX error:
事件?
答案 0 :(得分:86)
我不了解jQuery,但如果它区分成功和不成功(HTTP 200 OK与HTTP!= 200)Ajax请求,您可能希望PHP脚本使用不等于200的HTTP代码进行响应:< / p>
if ($everything_is_ok)
{
header('Content-Type: application/json');
print json_encode($result);
}
else
{
header('HTTP/1.1 500 Internal Server Booboo');
header('Content-Type: application/json; charset=UTF-8');
die(json_encode(array('message' => 'ERROR', 'code' => 1337)));
}
答案 1 :(得分:1)
$return = array();
$return['msg'] = "Could not connect to DB";
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
{
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
die(json_encode($return));
}
答案 2 :(得分:-1)
试一试。希望能帮助到你。
<!-- This is index.php --->
<html>
<head>
<script src="js/jquery.js" type="text/javascript"></script><!-- link to jQuery -->
<script language="javascript">
$(document).ready(function () {
$('input#send').click(function(){
/* Empty div#error and div#result incase they contain info from the last submission */
$('#error').empty('');
$('#result').empty('');
/* Client-side validation */
var name = $("input#name").val();
var age = $("input#age").val();
if (name==''){
alert('Insert your name.');
}
else if (age==''){
alert('Insert your age.');
} else {
var params = 'name=' + name + '&age=' + age;
$.ajax({
url:'b.php',
type:'post',
dataType:'html',
data:params,
cache: false,
success:data
});
function data (html) {
var $html = $( html ); // create DOM elements in a jQuery object
/* Return errors from 'b.php' */
$html.filter('#err').appendTo("#error");
/* Return valid Post */
$html.filter('#res').appendTo("#result");
/* Clear name input */
$('input#name').val('');
/* Clear age input */
$('input#age').val('');
}
}
});
});
</script>
<style type='text/css'>
#error{
color:maroon;
font-weight:bold;
}
#result{
color:green;
font-weight:bold;
}
</style>
</head>
<body>
<div id="error"></div><!-- View Errors -->
<div id="result"></div><!-- View valid Post -->
<input type='text' name='name' id="name" value='' /><br/ >
<input type='text' name='age' id="age" value='' /><br/ >
<input type='submit' name='send' id="send" value='Send' />
</body>
<?php
/* This is b.php */
if(($_POST['name']=='')||($_POST['age']=='')){
$error = '<div id="err">Error: Fill in ALL fields.</div>';
} elseif(is_numeric($_POST['name'])){
$error = '<div id="err">Error: Name should NOT contain numbers.</div>';
} elseif(!is_numeric($_POST['age'])){
$error = '<div id="err">Error: Age should ONLY contain numbers.</div>';
} else{
$result = '<div id="res">Hi '.$_POST['name'].', you are '.$_POST['age'].' years old.</div>';
}
echo $error;
echo $result;
?>
答案 3 :(得分:-2)
对于从PHP到AJAX的简单数据传输,并不总是需要Json编码或键值对。它可以使用字符串处理完成。
以下是解释此功能的示例代码。
$query = "SELECT email FROM login WHERE email = '". mysqli_real_escape_string($conn,$email) ."' AND password = '". mysqli_real_escape_string($conn,$pass) ."'" ; $result = mysqli_query($conn,$query); $row=mysqli_fetch_row($result); $row_cnt = mysqli_num_rows($result); $s_email = $row[0]; if ($row_cnt == 1) { $response="success"; } else { $response = "Invalid Credentials"; } $conn->close(); $_SESSION["email"]= $s_email; echo $response;
此代码显示如何将“成功”响应发送回调用php代码的ajax。此外,在ajax中可以执行以下操作来检索响应。
$.ajax({ type : 'POST', data : {email: $('#email').val(), password: $('#pass').val()}, url : 'login.php', success: function (data) { if(data == 'success'){ //the value echoed from php can be stored in the data variable of ajax window.location.assign('upload.php'); } else{ alert(data); } }, error: function ( xhr ) { alert("error"); } });
上述概念可以扩展为返回MULTIPLE VALUES。此方法允许以字符串格式将数据从PHP简单地传输到AJAX。
我们必须按照一个简单的步骤回应我们需要发送的所有内容,作为从php到ajax的响应,由一个独特的分隔符分隔。
echo $response.#; echo $email.#; echo $password.#; echo "Hello".#; echo "World";
然后可以简单地检索ajax中的变量数据,如上例和一个简单的函数,如
var res = data.split("#");
数据,是ajax中的变量。 然后可以在js中使用res数组用于我们需要的任何目的。