[英]Cannot get ajax post to work
我能夠觸發執行第一個警報的js文件,但是我無法獲得第二個警報的發生,php文件在那里並且工作返回0,但是alert('finished post'); 沒有來。 我認為它缺少某些語法。
$(function () {
$("#login_form").submit(function () {
alert('started js');
//get the username and password
var username = $('#username').val();
var password = $('#password').val();
//use ajax to run the check
$.post("../php/checklogin.php", { username: username, password: password },
function (result) {
alert('finished post');
//if the result is not 1
if (result == 0) {
//Alert username and password are wrong
$('#login').html('Credentials wrong');
alert('got 0');
}
});
});
});
這是PHP
session_start();
include 'anonconnect.php';
// username and password sent from form
$myusername= $_POST['username'];
$mypassword= $_POST['password'];
$sql = $dbh->prepare("SELECT * FROM Users WHERE UserLogin= :login");
$sql->execute(array(':login' => $myusername));
$sql = $sql->fetch();
$admin = $sql['admin'];
$password_hash = $sql['UserPass'];
$salt = $sql['salt'];
/*** close the database connection ***/
$dbh = null;
if(crypt($mypassword, $salt) == $password_hash){
// Register $myusername, $mypassword and redirect to file
$_SESSION['myusername'] = $myusername;
$_SESSION['loggedin'];
$_SESSION['loggedin'] = 1;
if($admin == 1){
$_SESSION['admin'] = 1;
}
header("location:search.php");
}
else {
$_SESSION['loggedin'];
$_SESSION['loggedin'] = 0;
echo 0;
}
好吧,我將對此進行介紹,看看我們是否可以解決。 首先,讓我們清理一下代碼-清理代碼始終最容易調試:
$(function () {
$("#login_form").on('submit', function(){
console.log('form submitted');
// get the username and password
var login_info = { username: $('#username').val(), password: $('#password').val() }
// use ajax to run the check
$.ajax({
url: '../php/checklogin.php',
type: 'POST',
data: login_info,
success: loginHandler
error: function(xhr, status, err){ console.log(xhr, status, err); }
});
return false;
});
function loginHandler(loggedIn){
if (!loggedIn) {
console.log('login incorrect');
} else {
console.log('logged in');
}
}
});
...好極了,我們現在看起來要好一些。 讓我們回顧一下快速進行的更改。
首先,交換alert
S代表console.log
秒-惱人的要少得多。 打開控制台進行檢查-如果使用的是Chrome,請使用command + optn + J
。
其次,我們稍微壓縮了登錄信息-這只是美觀,使我們的代碼更加簡潔。 確實,當需要再次使用變量時,應該使用變量,在這種情況下,只需使用一次。
接下來,我們將$.post
函數替換為$.ajax
。 這給了我們兩件事–一是對請求詳細信息的更好控制,其二是錯誤回調,在這種情況下,這尤其重要,因為您幾乎肯定會收到服務器錯誤,這是您的原始問題。 這是$.ajax
的文檔, $.ajax
進行進一步的說明。
我們還將成功處理程序指向一個函數,以最大程度地減少此處的嵌套。 您可以在下面看到向下聲明的函數,它將接收服務器返回的數據。
最后,我們返回false,以便頁面不會刷新。
現在,讓我們解決這個問題。 使用此代碼時,您應該在控制台中看到幾件事。 第一個消息可能是紅色消息,帶有類似500 internal server error
消息,第二個消息應該是ajax函數的錯誤回調的結果。 如果您單擊“ 網絡”選項卡並瀏覽請求和響應的詳細信息,則可以在Chrome中獲得有關此操作的更多詳細信息。
我無法修復您的PHP,因為您沒有發布它,但是我認為您將繼續進行編輯或自己弄清楚。 解決服務器問題后,您應該返回干凈的console.log
以及發送回的響應,然后就可以繼續進行。
或者,由於缺少頁面刷新,因此可以使用這種方法,在這種情況下,您可以忽略前兩段並聲明勝利:)
希望這可以幫助!
啊,真該死。 您沒有取消默認的提交操作,因此表單可以正常提交。 加上這個
$("#login_form").submit(function (e) {
e.preventDefault();
// and so on
您需要更改第二行並添加e.preventDefault,以防止表單刷新整個頁面。
$("#login_form").submit(function (e) {
e.preventDefault();
另外,我將更改AJAX請求以使用GET並更改PHP中的代碼以從GET讀取變量,因此您可以通過在瀏覽器中運行它(如checklogin.php?username = x&password = y)來輕松測試PHP頁面是否正常工作
嘗試這個:
$("#login_form").submit(function () {
alert('started js');
//get the username and password
var username = $('#username').val();
var password = $('#password').val();
//use ajax to run the check
$.post("../php/checklogin.php", { username: username, password: password }, function (result) {
alert('finished post');
//if the result is not 1
if (result == '0') {
//Alert username and password are wrong
$('#login').html('Credentials wrong');
alert('got 0');
}
}, 'text');
});
可能是服務器沒有提供正確的數據格式。 例如,如果您請求json,而jQuery無法將結果字符串轉換為json。 那么該函數將不會執行,那么您將無法獲得'alert('got 0');' 事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.