2017-09-22 85 views
-1

我試圖將String作爲錯誤消息回顯,但仍然在Jquery Ajax中將整個頁面變爲響應,儘管正確的輸入被重定向到了正確的頁面。在jQuery中獲取整個頁面作爲響應aJax

PHP

if($_GET['action']=="login"){ 
if (isset($_POST)) { 
    $username = mysqli_real_escape_string($link, $_POST['username']); 
    $password = md5($salt.mysqli_real_escape_string($link, $_POST['password'])); 
    try{ 
     validateLoginInputs(); 
     loginUser($username, $password); 
      echo "1"; 
    } catch(Exception $e){ 
     echo $e->getMessage();  //I think something is wrong with this line 
    } 
} 

功能 - loginUser

function loginUser($username,$password){ 
global $link; 
    $query = "SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password' LIMIT 1"; 
     $result = mysqli_query($link, $query); 
     $row = mysqli_fetch_assoc($result); 
     $_SESSION['id'] = $row['id']; 
     $_SESSION['username'] = $row['username']; 
    if(!$row){ 
     throw new Exception("Username or Password didn't match"); 
     } 
} 

jQuery的

else if ($("#loginorsignup").val()==="1") { 
    $.ajax({ 
    url: "action.php?action=login", 
    type: "POST", 
    data: "username="+$("#username").val()+"&password="+$("#password").val(), 
    success: function(response){ 
    if(response!=1){ 
     console.log(response); // getting html of index.php When username or password is incorrect 
     $("#userWarnings").html(response).show(); 
    }else if(response==1){ 
     console.log(response); 
     window.location.assign("home.php"); 
    } 
     } 
    }); 
} 

集裝箱顯示錯誤

<div class="modal-body"> 
     <div class="alert alert-warning" role="alert" id="userWarnings"> 
     </div> 
+0

可以將'echo「1」;'改爲'exit(1)'。我個人會發回JSON,以及正確的內容類型標題。例如。 '{成功:錯誤,信息:'一些錯誤信息'}' – ficuscr

+0

那'是一個不錯的主意,它沒有'在我看到視頻教程時會發現我的想法。謝謝。 – feedammo

回答

0

我建議如果這個函數返回true,則用戶存在更改此功能

function loginUser($username,$password){ 
    global $link; 
    $query = "SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password' LIMIT 1"; 
    $result = mysqli_query($link, $query); 
    $row = mysqli_fetch_assoc($result); 
    if($row){ 
     $_SESSION['id'] = $row['id']; 
     $_SESSION['username'] = $row['username']; 
     return true; 
    } 
    return false; 
} 

現在。然後

if($_GET['action']=="login"){ 
if (isset($_POST)) { 
    $username = mysqli_real_escape_string($link, $_POST['username']); 
    $password = md5($salt.mysqli_real_escape_string($link, $_POST['password'])); 
    try{ 
     validateLoginInputs(); 
     echo loginUser($username, $password) ? '1' : 'Username or Password didn\'t match'; 

    } catch(Exception $e){ 
     echo $e->getMessage(); 
    } 
} 

您不必在您的前端(JQuery)代碼中進行任何更改。

希望這可以幫助你。

+0

我試圖做這個異常處理,你建議拿走那部分? – feedammo

+0

是的,因爲拋出異常總是在代碼中很痛苦,你必須處理前端代碼中的所有異常情況。相反,你直接回顯它,因爲它很簡單,請檢查你在前端響應== 1中做什麼。 – RamaKrishna

+0

好吧,但我上面提到,我試圖將echo字符串作爲錯誤消息,當我的用戶名不存在時,我仍然將頁面作爲響應。可能是什麼原因造成的? – feedammo