天天看點

異步送出給PHP代碼,老友記之PHP7留言闆開發(Ajax異步送出)

前言

這節教程算是這個專輯的重中之重吧。随着前端技術的不斷疊代更新,網站很多功能的實作都轉移到前端去實作,2018年第一季度程式設計語言排名來看,JavaScript仍然是最受歡迎的程式設計語言。是以想要深入學習js,那麼Ajax是必不可少的。

在前面課程講過js驗證,課件代碼是在老友記之PHP7留言闆開發(JS驗證)基礎上改動,隻需加入ajax異步操作部分即可輕松完成。

需要注意的是,這裡不再詳細講解什麼是XMLHttpRequest對象,為什麼要用它等等,相信你再能運用的情況下再去深入了解它會印象更加深刻,這裡就盡可能的少一些文字類的應試教學并能達到學會效果。

打開編輯器開始動手吧!

Ajax異步的核心部分講解

// 第一步 建立 XMLHttpRequest 對象,為了更容易了解,變量就用ajax

var ajax = new XMLHttpRequest();

// 第二步 初始化一個Ajax請求,url參數是遠端請求位址ajax.php

ajax.open('POST', url, true); // 這裡用到post送出留言,是以用post方式送出給伺服器

// ajax.open('GET', url, true); // get方式請求伺服器

// 第三步 發送請求;如果該請求是異步模式(預設),該方法會立刻傳回。

ajax.send(inputdata);

// 第四步 發送請求總該要知道有沒收到吧,這裡就需要用到Ajax的事件監聽器onreadystatechange

ajax.onreadystatechange = function(){

// 這裡判斷伺服器是否有資料響應,如果有則做些你要處理的邏輯,比如提示使用者操作成功

}

上面四步驟還了解不了的話,可以認為是第一步找個朋友A發郵件,第二步給這位A朋友寫信件内容并封裝寫上位址貼郵票,第三步投遞郵件,過了一陣(當然網絡通的情況下立即有響應的),第四步收到A朋友的回信了,很開心。接下來就可以根據回信内容做事啦,比如見(網)面(約)...

好了就到這裡,下面是完整代碼。

HTML+JS頁面代碼

留言闆_科科分享

function checkform(){

var nickname = document.getElementsByTagName('input')[0].value; // 擷取使用者輸入的姓名

var tel = document.getElementsByTagName('input')[1].value; // 擷取使用者輸入的聯系方式

var content = document.getElementsByTagName('textarea')[0].value; // 擷取使用者輸入的留言内容

// 如果沒有輸入姓名 則提示

if(nickname == ''){

alert('請輸入您的姓名');

document.getElementsByTagName('input')[0].focus(); // 将光标定位到姓名輸入框

return false; // 阻止冒泡 輸入姓名後才能通過

}

// 如果沒有輸入聯系方式 則提示

if(tel == ''){

alert('請輸入您的聯系方式');

document.getElementsByTagName('input')[1].focus(); // 将光标定位到聯系方式輸入框

return false; // 阻止冒泡 輸入聯系方式才能通過

}

// 如果沒有輸入留言内容 則提示

if(content == ''){

alert('請輸入您的聯系方式');

document.getElementsByTagName('textarea')[0].focus(); // 将光标定位到留言内容輸入框

return false; // 阻止冒泡 輸入留言内容才能通過

}

// js已經拿到了使用者送出的資料,那接下來就是AJAX(頁面無重新整理送出資料到伺服器-異步通信)

// 異步請求 start

var ajax, url, inputdata;

// 建立 XMLHttpRequest 對象

if(window.XMLHttpRequest){

ajax = new XMLHttpRequest();

}else{

// 相容Internet Explorer(IE5 和 IE6)使用 ActiveX 對象

ajax = new ActiveXObject("Microsoft.XMLHTTP");

}

url = 'ajax.php';

ajax.open('POST', url, true);

ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); // 用POST的時候一定要有這句

inputdata = 'nickname='+nickname+'&tel='+tel+'&content='+content;

ajax.send(inputdata);

// 接收伺服器傳回的資料

ajax.onreadystatechange = function(){

// 擷取伺服器響應狀态碼

if(ajax.readyState == 4 && ajax.status==200){

// 擷取伺服器傳回的響應傳回的資料

var retdata = ajax.responseText;

if(retdata == 1){

alert('留言資訊已送出成功!感謝您的寶貴意見。');

}

}

}

// 異步請求 end

return false; // 這裡是為了方式submit點選後表單自動送出

// document.feedback_form.submit(); // 送出使用者資料到後端action中的位址

}

留言闆

FEEDBACK

PHP代碼(ajax.php)

include 'config.php';

// POST接收使用者送出的資料

$nickname = !empty($_POST['nickname'])? addslashes(strip_tags($_POST['nickname'])):''; // 留言人名稱

$tel = !empty($_POST['tel'])?addslashes(strip_tags($_POST['tel'])):''; // 留言人的聯系方式

$content = !empty($_POST['content'])?addslashes(strip_tags($_POST['content'])):''; // 留言内容

$time = time(); // 目前系統時間,即使用者留言時間

// 插入mysql語句

$sql = "INSERT INTO feedback (name, contact, content, addtime) VALUES ('{$nickname}', '{$tel}', '{$content}', '{$time}')";

// 立即執行mysql語句

$result = mysqli_query($mysqli, $sql); // 傳回一個資源辨別符,通常是數字

$insert_id = mysqli_insert_id($mysqli); // 傳回資料表的自增長ID,比如新使用者注冊傳回使用者ID

// echo $insert_id; // 當你在調試的時候,你會發現echo是很好的幫手。

if($insert_id > 0){

// 如果入庫成功,這裡可以處理其他想要的邏輯

echo 1;

exit; // 退出程式,使其不再往下執行代碼

}

// 這是錯誤的時候傳回0

echo 0;

exit;

記得動手練習哦!歡迎下面評論區塗鴉!~