我之前问过这个问题,但每次都认为其他“错误”是根本原因。不幸的是,他们不是。
当用户第一次尝试登录时,PHP 服务器返回到 jQuery $.ajax 错误块。它还强制页面重新加载,使得在 Webkit 中调试变得困难。
每次连续登录都可以完美运行,直到浏览器关闭(cookie 过期)。然后第一次登录再次失败。
这是用户登录时执行的 Javascript。
var form_data = {
email: email,
password: password
};
$.ajax({
type: 'POST',
url: '/Login.php',
data: form_data,
success: function(jsonResponse){
console.log('Login returned via success.'); // Always hits this AFTER first login.
console.dir(jsonResponse);
},
error: function (xhr, textStatus, error) {
console.log('Login returned via error.'); // Hits this on first login.
console.log(xhr);
console.log(textStatus);
console.log(error);
}
});
请注意,在 PHP 中,所有 DB 调用都具有以下语法,并且没有一个返回错误。
error_reporting(E_ALL);
$opt = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$dsn = 'mysql:host=localhost;dbname=' . $DB_Database;
$dbh = new PDO($dsn, $DB_UserName, $DB_Password, $opt);
$sth = $dbh->prepare("SELECT * FROM Users WHERE EMail=:email OR Temp_EMail=:temp_email");
$sth->bindParam(':email', $email, PDO::PARAM_STR);
$sth->bindParam(':temp_email', $email, PDO::PARAM_STR);
$sth->execute();
这是准备和返回 JSON 的 PHP 代码段。
$messageList = array();
$message = array('status' => 0, 'heading' => "SUCCESS:", 'message' => "You are now logged in.");
array_push($messageList, $message);
$response = array('success' => true, 'messageList' => $messageList, 'userName' => $fullName);
$json = json_encode($response);
dump_to_error_log($json);
echo $json;
return;
这是第一次登录时错误日志中的 JSON:
{"success":true,"messageList":[{"status":0,"heading":"SUCCESS:","message":"You are now logged in."}],"userName":"My Name"}
这是首次登录后错误日志中的 JSON:
{"success":true,"messageList":[{"status":0,"heading":"SUCCESS:","message":"You are now logged in."}],"userName":"My Name"}
是的。JSON 每次都是相同的。那么,为什么页面第一次重新加载?
这是我在第一次登录尝试时在控制台中看到的内容。
Login returned via error. script.js:3001
Object {readyState: 0, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
script.js:3002
error script.js:3003
script.js:3004
这是我在第一次登录尝试时在控制台中看到的内容。(域已编辑。)
XHR finished loading: "http://dev.DOMAIN.com/Login.php". jquery.min.js:3
send jquery.min.js:3
st.extend.ajax jquery.min.js:3
loginButtonClicked script.js:2963
onclick dev.DOMAIN.com:910
Login returned via success. script.js:2968
{"success":true,"messageList":[{"status":0,"heading":"SUCCESS:","message":"You are now logged in."}],"userName":"My Name"}
No Properties
知道为什么第一次登录尝试行为失败吗?
谢谢!