簡體   English   中英

無法獲得Ajax發布信息

[英]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

參見http://api.jquery.com/event.preventDefault/

您需要更改第二行並添加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');
});
  1. },'text');

可能是服務器沒有提供正確的數據格式。 例如,如果您請求json,而jQuery無法將結果字符串轉換為json。 那么該函數將不會執行,那么您將無法獲得'alert('got 0');' 事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM