0

我之前问过这个问题,但每次都认为其他“错误”是根本原因。不幸的是,他们不是。

当用户第一次尝试登录时,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

知道为什么第一次登录尝试行为失败吗?

谢谢!

4

0 回答 0