Ajax登录问题
我遇到了Ajax登录功能问题。 还有另一个类似于我能找到的问题,但它没有用。
我不知道是什么问题,这对另一个程序也有效,没有问题,希望有人能看到我的错误
从测试中我认为问题出现在“checkLogIn”函数中,因为当我运行应用程序时,函数中的警告显示
阿贾克斯:
$("#checkLogIn").click(function()
{
$.ajax({
type: 'POST',
contentType: 'application/json',
url: rootURL + '/logIn/',
dataType: "json",
data: checkLogIn(),
})
.done(function(data)
{
if(data == false)
{
alert("failure");
}
else
{
alert("Success");
$.mobile.changePage("#page");
}
})
.always(function(){})
.fail(function(){alert("Error");});
});
function checkLogIn()
{
alert();
return JSON.stringify({
"userName": $("#enterUser").val(),
"password": $("#enterPass").val(),
});
}
我也会包含PHP,但PHP在测试后会100%正常工作。
PHP:
$app->post('/logIn/', 'logIn');
function logIn()
{
//global $hashedPassword;
$request = SlimSlim::getInstance()->request();
$q = json_decode($request->getBody());
//$hashedPassword = password_hash($q->password, PASSWORD_BCRYPT);
$sql = "SELECT * FROM users where userName=:userName AND password=:password";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("userName", $q->userName);
$stmt->bindParam("password", $q->password);
$stmt->execute();
//$row=$stmt->fetch(PDO::FETCH_ASSOC);
//$verify = password_verify($q->password, $row['password']);
$db = null;
//if($verify == true)
//{
// echo "Password is correct";
//}
//else
// echo "Password is incorrect";
echo "Success";
} catch (PDOException $e) {
echo $e->getMessage();
}
}
我已经评论过任何和所有的哈希,直到我可以正常工作
ajax脚本没有问题。 从我的假设你总是得到Error警报。 这是因为你添加了dataType: "json",这意味着你正在请求rootURL + '/logIn/'作为json Object的响应。 但在PHP中,您只需将Success作为纯文本回显。 这使得ajax进入失败功能。 所以,你需要发送响应为json。 有关ajax中的contentType和datatype更多详细信息,请参阅此链接。
所以你需要改变echo "Success"; echo json_encode(array('success'=>true)); 在PHP文件中。 现在你会得到Success警报。 下面我添加了一个很好的方式来处理php文件中的json_encoded响应。
$app->post ( '/logIn/', 'logIn' );
function logIn() {
global $hashedPassword;
$request = SlimSlim::getInstance ()->request ();
$q = json_decode ( $request->getBody () );
$hashedPassword = password_hash($q->password, PASSWORD_BCRYPT);
$sql = "SELECT * FROM users where userName=:userName";
try {
$db = getConnection ();
$stmt = $db->prepare ( $sql );
$stmt->bindParam ( "userName", $q->userName );
$stmt->execute ();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$verify = false;
if(isset($row['password']) && !empty($row['password']))
$verify = password_verify($hashedPassword, $row['password']);
$db = null;
$response = array();
$success = false;
if($verify == true)
{
$success = true;
$response[] = "Password is correct";
}
else
{
$success = false;
$response[] = "Password is incorect";
}
echo json_encode(array("success"=>$success,"response"=>$response));
} catch ( PDOException $e ) {
echo $e->getMessage ();
}
}
我修改了ajax代码。 在那里我向你展示了如何从json_encoded Object得到响应。
$("document").ready(function(){
$("#checkLogIn").click(function()
{
var post_data = JSON.stringify({
"userName": $("#enterUser").val(),
"password": $("#enterPass").val(),
});
$.ajax({
type: 'POST',
contentType: 'application/json',
url: rootURL + '/logIn/',
dataType: "json",
data: post_data,
})
.done(function(data)
{
// data will contain the echoed json_encoded Object. To access that you need to use data.success.
// So it will contain true or false. Based on that you'll write your rest of the code.
if(data.success == false)
{
var response = "";
$.each(data.response, function(index, value){
response += value;
});
alert("Success:"+response);
}
else
{
var response = "";
$.each(data.response, function(index, value){
response += value;
});
alert("Failed:"+response);
$.mobile.changePage("#page");
}
})
.always(function(){})
.fail(function(){alert("Error");});
});
});
希望能帮助到你。
链接地址: http://www.djcxy.com/p/46167.html上一篇: Ajax login issues
