前端 基礎技術(上) 是瀏覽器提供一套的 ,用於向伺服器發出請求,接受服務端返回的響應,通過 調用,實現通過代碼控制請求與響應,實現網路編程。 發送請求: 協議: 進行初始化,建立連接,接收響應,響應體載入,載入成功! 非同步的 和 用於創建快速動態網頁的技術 對象 向伺服器發送請求 請求類型,為 和 ...
Web
前端-Ajax
基礎技術(上)
ajax
是瀏覽器提供一套的api
,用於向伺服器發出請求,接受服務端返回的響應,通過javascript
調用,實現通過代碼控制請求與響應,實現網路編程。
ajax
發送請求:
<!DOCTYPE html>
<html lang="en">
<head>
<meat charset="UTF-8">
<title>Ajax</title>
</head>
<body>
<script>
// ajax是一套api核心提供的類型:
var xhr = new XMLHttpRequest();
xhr.open();
xhr.send();
xhr.onreadystatechange = function(){
if(this.readyState != 4) return
// 獲取響應的內容
console.log(this.responseText);
}
</script>
</body>
</html>
<script>
var xhr = new XMLHttpRequest()
console.log(xhr.readyState);
xhr.open('GET', 'xxx.php')
console.log(xhr.readyState); // 1 初始化 請求代理對象
xhr.send()
console.log(xhr.readyState); // 1
xhr.addEventListener('readystatechange', function(){
// if(this.readyState != 4) return
// console.log(this.readyState);
})
// ajax創建一個XMLHttpRequest類型的對象,相當於打開一個瀏覽器
var xhr = new XMLHttpRequest()
// 打開一個網址之間的連接
xhr.open('GET','##.php')
// 通過連接發送一次請求
xhr.send(null)
// 指定xhr狀態變化事件處理函數
xhr.onreadystatechange = function() {
// 通過xhr 的readyState判斷請求的響應
if(this.readyState === 4){
console.log(this);
}
}
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'xxx.php')
xhr.send(null)
xhr.onload=function(){
console.log(this.readyState)
console.log(this.responseText)
}
</script>
http
協議:
<script>
var xhr = new XMLHttpRequest()
xhr.open('GET', '/##.php') // 設置請求行
// xhr.setRequestHeader('HH', 'DA') // 設置一個請求頭
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('key=value&key1=value1') // 設置請求體
<body>
<form action="##.php" method="post">
<input type="text" name="name" id="">
<button>提交</button>
</form>
</body>
// http
// 設置請求報文的請求行
xhr.open('GET', './###.php')
// 設置請求頭
xhr.setRequestHeader('Accept', 'text/plain')
// 設置請求體
xhr.send(null)
xhr.onreadystateChange = function() {
if(this.readyState === 4) {
// 獲取響應狀態碼
console.log(this.status)
// 獲取響應狀態描述
console.log(this.statusText)
// 獲取響應頭信息
// 獲取指定響應頭
console.log(this.getResponseHeader('Content-Type'))
// 獲取全部響應頭
console.log(this.getAllResponseHeader())
// 獲取響應體
// 獲取響應文本形式
console.log(this.responseText)
// 獲取xml形式
console.log(this.responseXML)
}
}
進行初始化,建立連接,接收響應,響應體載入,載入成功!
// get請求
var xhr = new XMLHttpRequest()
xhr.open('GET', '.##.php?id=1')
// 一般get請求無需設置響應體
xhr.send(null);
xhr.onreadystatechange = function(){
if(this.readyState === 4) {
console.log(this.responseText);
}
}
// post
if(empty($_GE['id])) {
$json = json_encode($data);
echo $json;
}else{
foreach($data as $item) {
if($item['id'] != $_GET['id'] continue;
$json = json_encode($data);
echo $json;
}
}
非同步的 JavaScript
和 XML
AJAX = Asynchronous JavaScript and XML
用於創建快速動態網頁的技術
XMLHttpRequest
對象
var xhr;
if (window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}
else{
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
向伺服器發送請求
xmlhttp.open("GET","123.txt",true);
xmlhttp.send();
請求類型,為get
和post
,url
文件在伺服器上的位置,true
非同步和false
同步。
xhr.open("POST","###.asp",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("name=da&age=12");
onreadystatechange
事件
XMLHttpRequest
的狀態信息,從0到4變化,0為請求未初始化,1為建立連接成功,2為請求已接收,3為請求處理中,4為請求完成。
xhr.onreadystatechange=function() {
if (xhr.readyState==4 && xhr.status==200) {
}
}
<ul id="list"></ul>
var listElement = document.getElementById('list');
var xhr = new XMLHttpRequest();
xhr.open('GET', '###。php?id=2');
xhr.send(null)
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
// console.log(this.responseText)
var data = JSON.parse(this.responseText)
for(var i = 0; i<data.length; i++) {
var liElement = document.createElement('li');
liElement.innerHTML = data[i].name;
listElement.appendChild(liElement);
}
}
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
var data = JSON.parse(this.responseText)
for(var i = 0; i<data.length; i++){
var liElement = document.createElement('li')
liElement.innerHTML = data[i].name;
liElement.id=data[i].id
listElement.appendChild(liElement);
liElement.addEventListener('click', function() {
var xhr1 = new XMLHttpRequest();
xhr1.open('GET', '###.php?id=' + this.id)
xhr1.send()
xhr1.onreadystatechange = function() {
if(this.readyState != 4) return
var obj = JSON.parse(this.responseText)
alert(obj.age)
}
}
}
}
onreadystatechange
事件
readyState
返回當前請求的狀態
responseBody
將回應信息文體
status
返回當前請求的狀態碼
statusText
返回當前請求的響應的狀態
abort
取消當前請求
getAllResponseHeaders
獲取響應指定的http
頭
open
創建一個新的http
請求
send
發送請求到http
伺服器並接收回應
setRequestHeader
指定請求頭
<?php
if(empty($_POST['username']) || empty($_POST['password'])) {
exit('請輸入用戶名和密碼');
}
// 校驗
$username = $_POST['username'];
$password = $_POST['password'];
if($username === 'admin' && $password === '123') {
exit('成功');
}
exit('失敗');
?>
var btn = document.getElementById('btn');
// 獲取元素
var txtUsername = document.getElementById('username');
var textPassword = document.getElementById('password');
btn.onclick = function() {
var username = txtUsername.value;
var password = txtPassword.value;
var xhr = new XMLHttpRequest();
xhr.open('POST', '##.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
// xhr.send('username=' + username + '&password=' + password)
xhr.send(`username=${username}&password=${password}`);
// 界面
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
console.log(this.responseText);
}
}
// jquery中的ajax
$.ajax({
type: 'GET',
url: "###.php?id="+$('#id').val(),
dataType: "json"
success: function(data){
$("jq").html();
}else{
$("jq").html();
},
error: function(jq) {
alert();
}
})
$.ajax({
type: "POST",
url: "ajax.php",
dataType: "json",
data: {"username": "admin","password": 123},
success: function(msg) {
console.log(msg)
},
error: function() {
console.log("error")
}
})
function creathttprequest(){
if(window.XMLHttpRequest)
var xml=new XMLHttpRequest();
else
var xml=ActiveXObject("Miscrosoft.XMLHTTP");
return xml;
}
function addAjax() {
var xml = createhttprequest();
xml.open("POST","123.php",false);
xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xml.send(url);
if( xml.readyState == 4 && xml.status == 200 ) {
alert(xml.responseText);
}
}
響應數據
<?php
header('Content-Type: application/xml');
?>
<?xml version="1.0" encoding="utf-8"?>
<person>
<name>dashu</name>
<age>16</age>
<gender>男</gender>
</person>
<script>
var xhr = new XMLHttpRequest()
xhr.open('GET', '###.php')
xhr.send()
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
// console.log(this.responseXML)
// console.log(this.responseXML.documentElement.getElementsByTagName('name')[0])
// console.log(this.responseXML.documentElement.children[0].innerHTML)
}
如何解析服務端的數據:
<table>
<tbody id="content"></tbody>
</table>
<script>
var xhr = new XMLHttpRequest()
xhr.open('GET', '###.php')
xhr.send()
xhr.onreadystatechange = function() {
if(this.readyState != 4) return
var res = JSON.parse(this.responseText);
var data = res.data
for(var i = 0; i<data.length; i++) {
var tr = document.createElement("tr");
var td = document.createElement("td");
td.innerHTML = data[i].id;
}
}
</script>
相容:
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
模板:
https//aui.github.io/art-template/
面試手寫:
var xhr = new XMLHttpRequest();
xhr.open('GET', '###.php');
xhr.send(null);
xhr.onreadystatechange = function() {
if(this.readyState === 4){
console.log(this);
}
}
實例:
<script>
function add(){
var xhr;
if (window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}else{
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.onreadystatechange=function(){
if (xhr.readyState==4 && xhr.status==200)
{
document.getElementById("div").innerHTML=xhr.responseText;
}
}
xmlhttp.open("GET","/info.txt",true);
xmlhttp.send();
}
</script>
實例:
<script>
function change(str){
if(str == ""){
document.getElementById("txt").innerHTML="";
return;
}
if(window.XMLHttpRequest){
xhr=new XMLHttpRequest();
}else{
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.onreadystatechange=function(){
if (xhr.readyState==4 && xhr.status==200){
document.getElementById("txt").innerHTML=xhr.responseText;
}
}
xhr.open('GET','###.php?id=' + str, true);
xhr.send();
}
</script>
<form>
<select name="users" onchange="change(this.value">
<option value=""></option>
<option value="1"></option>
<option value="2"></option>
</select>
</form>
<div id="txt"></div>
//php
$id = isset($_GET["id"]) ? intval($_GET["id"]) : '';
$con = mysqli_connect('localhost','root','123456');
if (!$con)
{
die('連接失敗: ' . mysqli_error($con));
}
// 選擇資料庫
mysqli_select_db($con,"test");
// 設置編碼
mysqli_set_charset($con, "utf8");
$sql="SELECT * FROM Websites WHERE id = '".$id."'";
$result = mysqli_query($con,$sql);
結言
好了,歡迎在留言區留言,與大家分享你的經驗和心得。
感謝你學習今天的內容,如果你覺得這篇文章對你有幫助的話,也歡迎把它分享給更多的朋友,感謝。
作者簡介
達叔,理工男,簡書作者&全棧工程師,感性理性兼備的寫作者,個人獨立開發者,我相信你也可以!閱讀他的文章,會上癮!,幫你成為更好的自己。長按下方二維碼可關註,歡迎分享,置頂尤佳。