只有首次通过$ .ajax登录才会失败并导致页面重新加载

时间:2013-02-26 19:28:34

标签: php jquery ajax

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

当用户第一次尝试登录时,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中,所有数据库调用都具有以下语法,并且都不会返回错误。

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

知道第一次登录尝试时行为失败的原因吗?

谢谢!

0 个答案:

没有答案