為了前端與后台進行交互,我們使用ajax來完成這些功能。
我們首先了解,什么是ajax?
Asynchronous JavaScript and XML
通過在后台與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新,可以局部刷新而不必整個頁面整體刷新。
如何與服務器進行數據交換?
首先,需要自己搭建服務器,在服務端的環境中可運行PHP語言
從網頁進入服務器有三種基本方式:
1. localhost:+端口號
2. 127.0.0.1+端口號
3. ip+端口號
然后,和服務器端的php頁面建立聯系
大致分為兩種。一種是通過form表單向后台傳輸數據。一種是通過ajax向后台傳輸數據。
第一種:通過form表單向后台傳輸數據。
如下例子:在html頁面中的form表單中,與 05.2.php 建立聯系 ,數據傳遞方式為POST。
<form action="05.2.php" method="post"> <input type="text" placeholder="請輸入用戶名" name="userName"> <input type="submit" placeholder="登錄"> </form>
下面是05.2.php頁面的內容:
<?php echo "這個為post提交的頁面"; echo $_POST['userName']; echo '<h1>'.$_POST['userName'].'歡迎你</h1>'; //在php中字符串拼接使用的是. ?>
輸入 jj 結果如下:
如果使用get方式傳遞數據,則在php頁面中使用$_GET['']方法。
第二種:通過ajax向后台傳輸數據。
如下例子:
原生js版的,使用ajax發送get請求:
html頁面代碼:
用戶名:<input type="text" id="username"> <span id="ts"></span> <button id="btn">驗證用戶名</button> <script> var username = document.getElementById("username"); var ts= document.getElementById("ts"); var btn = document.getElementById("btn"); // 點擊btn發送ajax請求。分為四小步 btn.onclick = function(){ // 1.創建xhr。由於兼容性問題,需要考慮IE5、IE6。 var xhr; if(window.XMLHttpRequest){ //常規寫法 xhr = new XMLHttpRequest(); }else{ //IE5、IE6寫法 xhr = new ActiveXObject("Microsoft.XMLHTTP"); } // 2.綁定監聽函數。通過狀態碼readyState(0: 請求未初始化,1: 服務器連接已建立,2: 請求已接收,3: 請求處理中,4: 請求已完成,且響應已就緒) 和 響應碼(1xx:信息類;2xx:成功(200);3xx:重定向(304);4xx客戶端錯誤(404);5xx:服務端錯誤(502) ) xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ if(xhr.responseText == 1){ //responseTest:獲得字符串形式的響應數據 。0和1 為php頁面的輸出文字,以此為判斷條件。 ts.innerHTML = "該用戶名已經被注冊" }else if(xhr.responseText == 0){ ts.innerHTML = "該用戶名可以使用" } } } // 3.建立連接 xhr.open("GET","08.php?uname=" + username.value,true); // 4.發送請求 xhr.send() } </script>
08.php 頁面代碼:
<?php $db = ['jack','mack','mary']; //模擬數據庫 $username = $_GET['uname']; //表示從前台傳遞過來的參數 $flag = false; foreach($db as $n){ if($n === $username){ $flag = true; break; } } if($flag){ echo "1"; }else{ echo "0"; } ?>
以此來達到 通過后台數據庫($db)中是否有輸入框中相同的名字來判斷賬號是否注冊。並提示對應的提示文字。
原生js版的,使用ajax發送post請求:
html部分只有第三步和第四步有所不同
//第三步: xhr.open('POST','http://localhost:端口號/資源文件/08.php',true); //第三步和第四步中間還要加上一步: 在發送post請求的時候,你得告訴服務器你發送的是一個什么 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //第四步: xhr.send('strName=' + uname.value); //如果傳遞的數據不只一個,通過字符串連接的方式繼續添加。比如 : + '&strPassword=' + password.value
對應的php頁面獲取數據的方法也改為$_POST['strName']。功能根據需要修改。
jQuery版,使用ajax發送get請求:
html頁面:
$("#btn").click(function(){ $.ajax({ type : "GET", url : "08.php?uname=" + $("#username").val(), success : function(data){ //data就是原生的xhr.responseTextif(data == 0){ $("#ts").html("該用戶名可以使用").css("color","green"); }else if(data == 1){ $("#ts").html("該用戶名已被占用").css("color","red"); } }, error : function(err){ //錯誤的 console.log(err) } }) })
php頁面和原生jsPHP頁面相同。
jQuery版,使用ajax發送post請求:
和get相似,有一些區別:
//type: type : "POST", //url: url : "php頁面地址" //由於數據傳遞不通過域名傳遞,需要創建一個對象來傳遞數據。 data:{ uname : $("#username").val() },
其他相同。