2013-12-11 64 views
0

確定現在下面是我的代碼,當一些機構提出的用戶名和密碼,然後單擊提交按鈕,然後在JavaScript和Ajax被觸發AJAX加載不正常

<html> 
    <head> 
     <title>Untitled Document</title> 
     <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
     <script> 
      $(function() { 
      $('form').on('submit', function (e) { 
      $.ajax({ 
      type: 'post', 
      url: 'redirect.php', 
      data: $('form').serialize(), 
      success: function() { 
      alert('form was submitted');  
      } 
      }); 
      e.preventDefault(); 
      }); 
      }); 

     </script> 
    </head> 
    <body> 
     <form> 
      <div class="add_list"> 
       <p><span>Select User Name : </span> 
        <input type="text" name="username" size="20" /> 
       </p> 
       <p><span>Select Your Password : </span> 
        <input type="password" name="password" size="20" /> 
       </p> 
      </div> 
      <div class="add_user"> 
       <input type="submit" value="add user" /> 
      </div> 
     </form> 
    </body> 
</html> 

其被觸發後,加載這個頁面是redirect.php頁

<?php 
include 'includes\config.php'; 
//connects to the database 


if (!empty($_POST['username']) && !empty($_POST['password'])) { 
    // Now checking user name and password is entered or not. 

    $username = mysql_real_escape_string($_POST['username']); 

    $password = mysql_real_escape_string($_POST['password']); 

    $check = "SELECT * from user where username= '" . $username . "'"; 
    $qry  = mysql_query($check); 
    $num_rows = mysql_num_rows($qry); 

    if ($num_rows > 0) { 
     // Here we are checking if username is already exist or not. 

     echo "The username you have entered already exist. Please try again with another username."; 
     echo ('<script type="text/javascript"> alert ("The username you have entered already exist.   Please try again with another username.");</script>'); 
     exit; 
    } 

    // Now inserting record in database. 
    $query = "INSERT INTO user VALUES ('','" . $username . "','" . $password . "')"; 
    //id,username and password 
    mysql_query($query); 
    echo "User Added Successfully"; 
    echo ('<script type="text/javascript"> alert ("The username is added successfully.");</script>'); 
    exit; 
} 
?> 

現在的問題是,當我提交表單它提醒該表單提交,但實際的JavaScript這是redirect.php沒有加載未報警,也儘管它正在變得越來越多,但php的回聲也不起作用在數據庫中提交,另一個問題是,如果該用戶名已經存在,當一個人輸入表單提交時是警報,然後什麼也沒有,當我檢查它沒有得到提交作爲用戶名已存在,但沒有回聲或警報的JavaScript工作。

+0

當你通過ajax提交時,瀏覽器不會重定向,這幾乎是整個點 – Steve

+0

你意識到你使用的是ajax,並且表單實際上不會被提交,也不會加載頁面,也沒有什麼會發生,除非你讓它發生? – adeneo

+0

請看這裏 - http://stackoverflow.com/questions/75943/how-do-you-execute-a-dynamically-loaded-javascript-block –

回答

2

我建議是這樣的:

在redirect.php頁:

if($num_rows > 0){ 
    echo ("fail"); 
} 
else { 
    //your insert code 
    echo ("success") 
} 

和你的Ajax成功應該是

success: function(data) { 
    switch(data) { 
     case 'fail': 
       //fail code here 
       alert ('That user already exists'); 
       //or simply alert (data); 
       break; 
     case 'success': 
       //Success code here 
       alert (data); 
       break; 
     default: 
       //Error - invalid response from redirect 
    } 
} 
+0

很好地使用CASE;太累了,想不到那麼深:) – TheCarver

+0

謝謝爸爸。我實際上覆制並粘貼了一些已經存在的代碼,只做了一些修改。我喜歡這種情況下的方法,因爲我實際上返回了一個0,1,2 ...等等,這樣很容易添加額外的意外事件。 – rrtx2000

0

你確實有一些問題,但贏得了」不要把它們全部放進去。

首先 - 這只是一個建議,而不是編碼錯誤 - 您應該使用mysqlliPDO進行數據庫查詢。您正在使用的mysql_函數不再受支持。

另外,(再次,只是諮詢),你有這樣一行:

"SELECT * from user where username= '" . $username . "'" 

這是沒有意義的返回所有列只是一個計數。只需使用SELECT username FROM user...SELECT COUNT(username) FROM user...即可。如果您有很多專欄和數百萬用戶,這是一個很好的做法。如果您需要檢查一列,然後選擇一列,請不要全部返回。

在你的PHP頁面,你可以簡單地附和成功以下對策:

echo "Added"; 
// and // 
echo "Exists"; 

你不需要呼應的腳本與警報。你可以做這個客戶端。

而且你的AJAX請求能夠有這種反應的監聽器:

$.ajax({ 
    type: 'post', 
    url: 'redirect.php', 
    data: $('form').serialize(), 
    dateType: "html", 
    success: function(data) { 
     if (data == "Added") { 
      alert("User added."); 
     } elseif (data == "Exists") { 
      alert("Username already exists!"); 
     } else { 
      alert("User submission failed."); 
     } 
    }, error: function() { 
     alert("An error occurred."); 
    } 
}); 

例如,交換這一塊的代碼:

if ($num_rows > 0) { 
    echo "The username you have entered already exist. Please try again with another username."; 
    echo ('<script type="text/javascript"> alert ("The username you have entered already exist. Please try again with another username.");</script>'); 
    exit; 
} 

有了這個:

if ($num_rows > 0) { 
    echo "Exists"; 
    exit; 
} 

而且使用我描述的上述AJAX方法。

0

您正在獲取結果,但您以錯誤的方式使用ajax。

成功已經給你了結果,如果你想在結果中使用html,你需要應用到DOM。

的HTML/JS以顯示您從response.php的反應應該是這樣的:

<html> 
    <head> 
     <title>Untitled Document</title> 
     <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
     <script> 
      $(function() { 
      $('form').on('submit', function (e) { 
       $.ajax({ 
       type: 'post', 
       url: 'redirect.php', 
       data: $('form').serialize(), 
       success: function (data) { 
        $('.result').html(data); 
       } 
       }); 
       $('.result').html('form was submitted'); 
       e.preventDefault(); 
      }); 
      }); 
     </script> 
    </head> 
    <body> 
    <form> 
     <div class="add_list"> 
     <p> 
      <span>Select User Name : </span> 
      <input type="text" name="username" size="20" /> 
     </p> 
     <p> 
      <span>Select Your Password : </span> 
      <input type="password" name="password" size="20" /> 
     </p> 
     </div> 
     <div class="add_user"> 
     <input type="submit" value="add user" /> 
     </div> 
     <div class="result"> 
     </div> 
    </form> 
    </body> 
</html> 
1

它看起來像你想錯了。 redirect.php頁面不是向用戶顯示用戶名存在或不存在的頁面。 redirect.php頁面將消息(或結果)發送回ajax函數。 ajax函數作用於該消息。可以通過在成功函數內部放置一個變量來訪問該消息,如:success:function(var)然後,測試變量的內容並採取行動。

爲了演示它是如何工作的並避免混淆,我建議您創建一個test_ajax.php頁面。 的test_ajax.php網頁的全部內容是:

<?php 
echo('These are the ajax results'); 
?> 

並更改網址和成功功能

<script> 
    $(function() { 
     $('form').on('submit', function (e) { 
     $.ajax({ 
     type: 'post', 
     url: 'test_ajax.php', 
     data: $('form').serialize(), 
     success: function(var) { 
     alert (var); 
     } 
     }); 
     e.preventDefault(); 
     }); 
    }); 
</script> 

現在,當你提交,它會提醒「這是阿賈克斯的結果。」 一旦你看到這是如何工作的,你可以回到你的redirect.php頁面,並讓Ajax按照其他答案中提到的對響應採取行動。