2016-10-04 71 views
0

我想創建一個Ajax函數,作出基於來自PHP的返回變量的決定。我遇到的主要問題是,當我將它打印到html類時,返回var將正確顯示,但是在ajax中的決定仍產生相同的結果false爲什麼它不工作:jquery Ajax成功數據與PHP返回變量

下面是PHP形式:

<form class="LogInForm" method="post" action="Auth.php" > 
    <div class="form-group"> 
     <input type="email" class="form-control" name="email" placeholder="Email Address" value="<?php echo $_SESSION['email'];?>"> 
    </div> 
    <div class="form-group"> 
     <input type="password" class="form-control" name="pw" placeholder="password"> 
    </div>       
    <button type="submit" class="btn btn-default btn-block">Submit</button> 

及以下的jQuery腳本:

$('.LogInForm').on('submit', function(e){ 
    var values = $(this).serialize(); 
    // get value of action attribute 
    var desination = $('.RemoveProd').prop('action');   
    // get current location url   

    // prevent page from leaving to desination 
    e.preventDefault(); 

    $.ajax({ 
      url: desination, 
      type: 'post', 
      data: values, 
      success: function(data){ 
       if(data == 1){; 
        alert("True"); 
        $('.Test').html(data); 
       } 
       else{ 
        alert("False"); 
        $('.Test').html(data); 
       } 
      }, 
      error: function(){ 
      } 
    }); 

}); 

PHP函數:

function Auth() 
    { 
     //start session and compture login info 
     $pass = md5($_POST['pw']); 
     $user = $_POST['email']; 

     //connect to DB 
     $conn = Connect(); 

     //Select all queries 
     $select = "SELECT Email, Password FROM customers WHERE Email ='".$user."' AND Password = '".$pass."'"; 
     $results = $conn->query($select); 

     //search in db for user and passwrod, also store quires in var to store in sessions. 
     if ($results->num_rows > 0) { 
      $bool = true;    
     } 
     else{ 
      $bool= false; 
     } 
     echo $bool; 
    } 

什麼情況是,如果我沒有放入正確的密碼,如果提醒我False,並在提交按鈕下告訴我什麼是數據(這是null)。當我輸入正確的密碼時,它仍會提醒我False,但數據顯示在提交按鈕下方爲1

還要注意何時繞過Ajax函數PHP函數可以正常工作。

更新 我能夠得到這個工作。我所做的只是將php文件Auth.php移動到另一個目錄,似乎解決了這個問題。我知道這不是一個文件路徑問題。我感謝大家的時間,並感謝您回答並指出我的方向正確,並帶有安全漏洞。

+0

您設置一個AJAX網址爲'無功desination = $託( '(」 RemoveProd。')。行動'); ',具有類'RemoveProd'的元素在哪裏?如果沒有這樣的元素,那麼你沒有通過網址到ajax ... – DouglasCamargo

+0

試圖比較你的反應作爲一個字符串? 'if(data ==='1')' –

+1

附註:'$ pass = md5($ _ POST ['pw']);'不是一種很好的密碼驗證方式。注意'password_verify()'和'password_hash()' – Rasclatt

回答

0

如果值爲不同類型,那麼Javascript ==爲false。我懷疑你通過AJAX獲取的值正在被讀爲字符串「1」而不是整數1(或布爾值TRUE)。試着改變你的比較:

if(data == '1')... 
-1

我已經測試了這一點,其工作正確

$('.LogInForm').on('submit', function(e){ 
    var values = $(this).serialize(); 
    // get value of action attribute 
    var desination = $('.RemoveProd').prop('action'); 
    // get current location url 

    // prevent page from leaving to desination 
    e.preventDefault(); 

    $.ajax({ 
     url: desination, 
     type: 'post', 
     data: values, 
     success: function(data){ 

      //remember the returned value is a type string if not changed or maybe it a raw integer from php 
      if(parseInt(data.trim().replace(/\D*/g,'')) == 1){ 
       alert("True"); 
       $('.Test').html(data); 
      } 
      else{ 
       alert("False"); 
       $('.Test').html(data); 
      } 
     }, 
     error: function(e){ 
      //check the logged error for more details 
      console.log(e) 
     } 
    }); 

});