我正在尝试以引导程序的形式使用ajax。我在服务端使用PHP。ajax方法成功地发布了数据,但没有接收到任何数据。显示的状态为200,就绪状态也是4,但仍然执行错误功能。PHP脚本的标题为application/json,并使用json_encode。但是ajax似乎从来没有得到服务器发送的对象!请帮忙。
这是jquery:`
$.ajax({
url:'http://localhost/Texephyr/startbootstrap-agency-1.0.5/login.php',
method:'POST',
data:$('#log-in').serialize(),
dataType:'json',
success:function(msg){
if(msg =="true"){
window.location.assign("admin/pages/index.php");
console.log(msg);
}
else{
if(msg == "false-p"){
$('#password-error').append('Invalid Password');
console.log(msg);
}
else{
$('#email-error').append('Invalid Username');
console.log(msg);
}
}
},
error: function(msg){
$('#email-error').append("There was an Error!");
console.log(msg)
}
});`
这是PHP脚本:`
<?php
header("Content-type: application/json");
session_start();
include("db_config.php");
$json = array("txt" = >"false");
if(isset($_POST['username']) && isset($_POST['password'])){
$query = "SELECT id,f_name,l_name,password FROM users WHERE email = '$uname'";
$login-status = $db->query($query);
if($login-status->num_rows ===1){
$result = $login-status->fetch_assoc();
if(password_verify($passd,$result["password"])){
$_SESSION["fname"] = $result["first_name"];
$_SESSION["lname"] = $result["last_name"];
$_SESSION["id"] = $result["id"];
$json["txt"]="true";
echo json_encode($json);
}
else{
$json["txt"]="false-p";
echo json_encode($json);
}
}
else {
$json["txt"] = "false";
echo json_encode($json);
}
}else{
$json["txt"]="false";
echo json_encode($json);
}
?>
`
看起来您必须更改如下的javascript文件
$.ajax({
url:'http://localhost/Texephyr/startbootstrap-agency-1.0.5/login.php',
method:'POST',
data:$('#log-in').serialize(),
success:function(msg){
msg=$.parseJSON(msg);
if(msg.txt =="true"){
window.location.assign("admin/pages/index.php");
console.log(msg);
}
else{
if(msg.txt == "false-p"){
$('#password-error').append('Invalid Password');
console.log(msg);
}
else{
$('#email-error').append('Invalid Username');
console.log(msg);
}
}
},
error: function(msg){
$('#email-error').append("There was an Error!");
console.log(msg)
}
});`
您将数据类型设置为json,因为我们将普通文本数据发送到php,所以可以删除它。在响应数据中,最好通过$.parseJSON()解析返回给Object的数据
然后您可以从php脚本中删除header()代码,我发布的代码将在没有json头的情况下工作。