【发布时间】:2017-10-05 23:51:58
【问题描述】:
大家好,我有以下登录页面。我从我的视图页面使用 ajax 访问它。当我尝试在 ajax 上显示时返回的数据的问题我在控制台上收到错误。
login.js:35 Uncaught TypeError: Cannot read property 'success' of 不明确的 在 Object.success (login.js:35) 在我 (jquery-2.2.0.min.js:2) 在 Object.fireWith [as resolveWith] (jquery-2.2.0.min.js:2) 在 z (jquery-2.2.0.min.js:4) 在 XMLHttpRequest。 (jquery-2.2.0.min.js:4)
<?php
ob_start();
function __autoload($classname)
{
require_once("../../database/$classname.php");
}
class userlogin extends database
{
private $errors = array();
private $message = array();
private $redirect = array();
private $data = array();
private $username;
private $password;
function login()
{
if (empty($_POST['username']) || empty($_POST['password'])) {
$this->message['error'] = "Please enter username and password";
} else {
$this->username = $_POST['username'];
$this->password = $_POST['password'];
try {
$this->stmt = $this->dbh->prepare("SELECT adminID,adminEmail,adminPassword,admintype FROM admin where adminEmail = ? ");
$this->stmt->execute(array(
$this->username
));
$this->results = $this->stmt->fetchall();
if (count($this->results) > 0) {
foreach ($this->results as $key => $row) {
if (password_verify($this->password, $row['adminPassword'])) {
$_SESSION['user'] = $row['adminID'];
$_SESSION['email'] = $this->username;
$_SESSION['usertype'] = $row['admintype'];
switch ($row['admintype']) {
case 's':
$this->redirect['redirect'] = "seo/index.php?route=home";
break;
case 'a':
$this->redirect['redirect'] = "admin/index.php?route=home";
break;
}
$this->message['success'] = "ok";
} else {
$this->message['error'] = "Username and password does not match";
}
}
} else {
$this->message['error'] = "Username does not exist";
}
}
catch (PDOException $pdo) {
$this->error = $pdo->getMessage();
error_log($this->error);
}
$this->data['message'] = $this->message;
$this->data['redirects'] = $this->redirect;
ob_end_clean();
echo json_encode($this->data);
}
}
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$login = new userlogin();
$login->login();
}
?>
还有我的 js
function proccessLogin(){
var username = $('input[type="email"][name="email"]').val();
var password = $('input[type="password"][name="upass"]').val();
$.ajax({
type : "POST",
data : {username:username,password:password},
url : "controller/login.php",
beforeSend : function(){
$('button').html('Checking...');
},
success : function(data){
console.log(data);
if(data.message.success == "ok"){
$('#results').removeClass('error');
$('#results').addClass('success');
$('#results').html('login Success, loading user data..');
$('button').html('Loading Profile.. i class="fa fa-spinner fa-pulse fa-1x fa-fw"></i>');
var redirectUrl = JSON.stringify(data.redirects);
redirectUrl = redirectUrl.replace(/[{"":}]/g, '');
var url = redirectUrl.replace('redirect','');
setTimeout(' window.location.href = "'+ url + '"; ', 6000);
}else{
$('button').html("Sign in");
$('#results').removeClass('success');
$('#results').addClass('error');
$('#results').html(data.message.error);
}
},
error : function(xhr){
console.log('Error : ' + xhr);
}
});
return false;
}
控制台日志结果:
{"message":{"success":"ok"},"redirects":{"redirect":"seo\/index.php?route=home"}}
如果成功,我希望能够显示来自 json 数组的消息,我将显示客户消息,否则显示来自响应的内容。问题是属性未定义。
第 35 行:
if(data.message.success == "ok"){
【问题讨论】:
-
您的错误消息表明错误位于第 35 行。这与您发布的代码不匹配。 login.js 中的内容是否比您显示的更多?如果是这样,要么显示它(如果它是相关的)或者特别指出你的代码中的哪一行是第 35 行。
-
@PatrickQ 第 35 行:
if(data.message.success == "ok"){ -
jQuery/Javascript 应该足够聪明,知道响应是 json,但以防万一遇到问题,请尝试在 ajax 设置中添加
dataType: "json",跨度> -
@PatrickQ 也添加了:
encode : true