### 編寫 Ajax
- 創建 Ajax 對象
- `ActiveXObject("Microsoft.XMLHTTP)`
- `XMLHttpRequest()`
- 筆記:變量是 `Window` 的屬性
- 使用未定義的變量 —— 報錯
- 使用未定義的屬性 —— `undefined`
- 用 `window.XMLHttpRequest` 返回真則是 chrome FF IE7,
- 用 `window.ActiveXObject("Microsoft.XMLHTTP")` 返回真則是 IE6
- 連接服務器
- `open(方法,文件名,異步傳輸)`
- *method*:請求的類型;`GET` 或 `POST` ,**必須大寫**
- *url*:文件在服務器上的位置,GET 請求要避免緩存,請向 URL 添加一個唯一的 ID
- *async*:true(異步)或 false(同步)
- 發送請求
- `send()`
- *string*:僅用于 POST 請求
- 接收返回值
- 請求狀態監控
- `onreadystatechange` 事件
- `readyState` 屬性:請求狀態
- `0: 未初始化 ` 還沒有調用 `open()` 方法
- `1: 開始載入 ` 已調用 `send()` 方法,正在發送請求
- `2: 載入完成 ` `send()` 發送完成,已收到全部響應內容
- `3: 解析 ` 正在解析響應內容
- `4: 完成` 響應內容解析完成,可以在客戶端調用了
- `status` 屬性( http 狀態碼):請求結果,`200: 成功`
- `responseText` 獲得字符串形式的響應數據
```js
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
```
> ## POST 請求
>
> 一個簡單 POST 請求:
>
> 實例
>
> ```js
> xmlhttp.open("POST","/try/ajax/demo_post.php",true); xmlhttp.send();
> ```
>
> 如果需要像 HTML 表單那樣 POST 數據,請使用 setRequestHeader() 來添加 HTTP 頭。然后在 send() 方法中規定您希望發送的數據:
>
> 實例
>
> ```js
> xmlhttp.open("POST","/try/ajax/demo_post2.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Henry&lname=Ford");
> ```
>
> | 方法 | 描述 |
> | :------------------------------- | :----------------------------------------------------------- |
> | setRequestHeader(*header,value*) | 向請求添加 HTTP 頭。 *header*: 規定頭的名稱 *value*: 規定頭的值 |
- 代碼:
```HTML
<html>
<head>
<script type="text/javascript">
function Ajax(url, suc, err) {
var oAjax = '';
if (window.XMLHttpRequest) {
// chrome FF IE9
oAjax = new XMLHttpRequest;
} else if (window.ActiveXObject) {
oAjax = new ActiveXObject("Microsoft.XMLHTTP");
}
if (oAjax != '') {
oAjax.onreadystatechange = state_change;
oAjax.open('get', url, true);
oAjax.send();
} else {
err();
}
function state_change() {
if (oAjax.readyState === 4) {
// 完成
if (oAjax.status === 200) {
// 成功
if (suc) {
suc(oAjax.responseText);
} else {
return oAjax.responseText;
}
} else if (oAjax.status === 404){
console.log('url錯誤或不存在');
} else if (err){
err();
}
} else if (oAjax.readyState === 0){
console.log('未初始化');
} else if (oAjax.readyState === 1){
console.log('正在發送請求');
} else if (oAjax.readyState === 2){
console.log('處理請求中');
} else if (oAjax.readyState === 3){
console.log('正在解析');
}
}
}
window.onload = function () {
var btn = document.getElementById('btn');
btn.onclick = function () {
Ajax('/api/blog/list', function (str) {
// 使用返回數據
console.log('成功')
document.getElementById('T1').innerHTML = str;
})
}
}
</script>
</head>
<body>
<div id="T1" style="border:1px solid black;height:40;width:300;padding:5"></div><br />
<button id="btn">Click</button>
</body>
</html>
```
- 前言
- 初探 JavaScript 魅力
- JavsScript 是什么
- 第一個 JS 特效:鼠標提示框
- 網頁換膚和 if 判斷
- 函數傳參
- 循環 while 和 for
- 導航欄選項卡
- JS 簡易日歷
- JavaScript 基礎
- JavaScript 組成
- 變量類型
- 變量類型轉換
- 變量的作用域和閉包
- 命名規范
- 運算符
- 程序流程控制
- JSON
- 深入 JavaScript
- 函數返回值
- 函數傳參與行間樣式
- 數組基礎操作
- 定時器的使用
- 定時器的作用
- 數碼時鐘
- Date 對象其它方法
- 延時提示框
- 無縫滾動
- DOM基礎應用
- DOM 基礎
- DOM 節點
- 操作元素屬性
- DOM 元素靈活查找
- DOM 操作應用
- 創建、插入和刪除元素
- 文檔碎片
- DOM操作應用高級
- 表格標簽
- 表格應用
- 表單應用
- JS 運動基礎
- 運動基礎
- 運動框架及應用
- 緩沖運動
- 運動的停止條件
- JS 運動應用
- 多物體運動框架
- 任意值運動框架
- 仿 Flash 圖片展示
- JS 運動中級
- 鏈式運動框架
- 完美運動框架
- 運動框架總結
- 運動框架應用
- JS事件基礎
- Event 對象和事件
- 鼠標事件
- 鍵盤事件
- JS 事件中級
- 默認事件
- 拖拽
- JS 事件高級應用
- 事件綁定
- 高級拖拽
- 自定義滾動條
- Ajax 基礎
- Ajax 是什么
- 使用 Ajax
- Ajax 原理
- Ajax 中級
- 編寫 Ajax
- Ajax 數據
- JS 面對對象基礎
- 面對對象是什么
- JS 中的面對對象
- 第一個面對對象的程序
- 工廠方式
- 原型:Prototype
- 面對對象編程方式
- JS 面對對象實例
- 面對對象的選項卡
- JS 面對對象高級
- Json 方式的面向對象
- 拖拽和繼承
- 使用繼承
- 系統對象
- BOM 應用
- BOM 基礎
- 尺寸及坐標
- 常用方法和事件
- COOKIE 基礎與應用
- 什么是 cookie
- 使用 cookie
- JS 中的正則表達式
- 正則表達式基礎
- 字符串與正則配合
- 字符串
- 量詞
- 常用正則例子
- JS Template 模板引擎
- 特性
- 語法
- 實例
- 表達式和運算符分類
- 主要表達式
- 左表達式
- 自增和自減
- 一元運算符
- 算術運算符
- 關系運算符
- 相等運算符
- 位移運算符
- 二進制位運算符
- 二元邏輯運算符
- 條件(三元)運算符
- 賦值運算符