ajax基础方法和应用,Ajax基础原理与应用

Ajax函数封装ajax.js

// Get / Post

// 参数 get post

// 是否异步

// 如何处理响应数据

// URL

// var handleResponse = function(response) {

//

// }

// ajax.get('demo1.php', 'name=zhangsan&age=20', handleResponse, true)

// ajax.post('demo1.php', 'name=zhangsan&age=20', handleResponse, true)

function Ajax()

{

// 初始化方法

this.init = function()

{

this.xhr = new XMLHttpRequest();

};

// get请求方法

this.get = function(url, parameters, callback, async = true)

{

this.init();

if (async) {

// 异步请求

this.xhr.onreadystatechange = function() {

// this => this.xhr

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

callback(this.responseText);

}

}

}

this.xhr.open('GET', url + '?' + parameters, async);

this.xhr.send();

};

// post请求方法

this.post = function(url, parameters, callback, async = true)

{

this.init();

if (async) {

// 异步请求

this.xhr.onreadystatechange = function ()

{

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

callback(this.responseText);

}

}

}

this.xhr.open('POST', url, async);

this.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

this.xhr.send(parameters);

}

}

var ajax = new Ajax();

调用演示

Title

请求

var btn = document.getElementById('btn');

var container = document.getElementById('container');

btn.onclick = function() {

ajax.post('demo2.php', 'name=zhangsan&age=20', function(data) {

container.innerHTML = data;

});

}

Ajax类封装ajax2.0.js

// 通过class定义类

class Ajax

{

// 构造方法

constructor()

{

this.xhr = new XMLHttpRequest()

}

// 内部方法,不加function

get(url, parameters, callback, async = true)

{

if (async) {

this.xhr.onreadystatechange = () => {

if (this.xhr.readyState == 4 && this.xhr.status == 200) {

callback(this.xhr.responseText)

}

}

// this.xhr.onreadystatechange = function() {

// if (this.readyState == 4 && this.status == 200) {

// callback(this.responseText)

// }

// }

}

this.xhr.open('GET', url + '?' + parameters, async)

this.xhr.send()

}

// 内部方法,不加function

post(url, parameters, callback, async = true)

{

if (async) {

this.xhr.onreadystatechange = () => {

if (this.xhr.readyState == 4 && this.xhr.status == 200) {

callback(this.xhr.responseText)

}

}

// this.xhr.onreadystatechange = function() {

// if (this.readyState == 4 && this.status == 200) {

// callback(this.responseText)

// }

// }

}

this.xhr.open('POST', url, async)

this.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

this.xhr.send(parameters)

}

}

let ajax = new Ajax()

调用演示

Title

ajax.get('demo1.php', 'course=ajax', function(data) {

console.log(data)

})

Ajax方式实现分页

带搜索功能

968a0878d4c0c3c1e13808f121f24b18.png

78ea27d7e60024f04dadb54366eeb6e0.png

首先是ajax类的封装Ajax.js

let $ = new class {

constructor()

{

this.xhr = new XMLHttpRequest();

this.xhr.onreadystatechange = () => {

if (this.xhr.readyState == 4 && this.xhr.status == 200) {

// process response text

let response = this.xhr.responseText;

if (this.type == "json") {

response = JSON.parse(response);

}

this.callback(response);

}

}

}

get(url, parameters, callback, type = "text")

{

// url = test.php?username=zhangsan&age=20

// parameters = {"username": "zhangsan", "age": 20}

let data = this.parseParameters(parameters);

if (data.length > 0) {

url += "?" + data;

}

this.type = type;

this.callback = callback;

this.xhr.open("GET", url, true);

this.xhr.send();

}

post(url, parameters, callback, type = "text")

{

let data = this.parseParameters(parameters);

this.type = type;

this.callback = callback;

this.xhr.open("POST", url, true);

this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

this.xhr.send(data);

}

parseParameters(parameters)

{

// username=zhangsan&age=20

let buildStr = "";

for (let key in parameters) {

let str = key + "=" + parameters[key];

buildStr += str + "&";

}

return buildStr.substring(0, buildStr.length - 1);

}

};

前端页面

test Users

Users List

test Users

#UsernameAgeGenderPhoneAddressCreated_at

let pageNo = 1;

let kws = '';

let searchBtn = document.getElementsByClassName('searchBtn')[0];

searchBtn.onclick = function() {

let search = document.getElementsByClassName('keywords')[0];

let keywords = search.value;

requestData(pageNo, keywords);

kws = keywords;

};

let requestPage = function(page) {

requestData(page, kws);

pageNo = page;

};

let requestData = function(page_number, keywords) {

let pagination = document.getElementsByClassName('pagination')[0];

let tbody = document.getElementsByTagName('tbody')[0];

tbody.innerHTML = '

加载中...'

$.get('users.php', {"page": page_number, "keywords": keywords}, function (res) {

let trs = '';

if (res.code == 1) {

// 请求成功

res.rows.forEach(function (item) {

let tr = '

' + item.id + '' +

'

' + item.username + '' +

'

' + item.age + '' +

'

' + item.gender + '' +

'

' + item.phone + '' +

'

' + item.address + '' +

'

' + item.created_at + '' +

'

';

trs += tr;

});

tbody.innerHTML = trs;

// 加载页码导航

// previous

let previousBtn = '';

if (res.page_number == 1) {

previousBtn = '

Previous';

} else {

previousBtn = '

Previous';

}

// next

let nextBtn = '';

if (res.page_total == res.page_number) {

nextBtn = '

Next';

} else {

nextBtn = '

Next'

}

let pages = previousBtn;

for (let page = 1; page <= res.page_total; page++) {

let active = '';

if (page == res.page_number) {

active = 'active';

}

pages += '

' + page + '';

}

pages += nextBtn;

pagination.innerHTML = pages;

}

}, 'json');

};

requestData(1, '');

users.php

/**

* Created by PhpStorm.

* User: JasonLee

* Date: 2018/12/1

* Time: 18:27

*/

// 请求数据库,响应对应页码的数据

// PDO

// 接收请求数据

$pageNo = $_GET['page'] ?? 1;

$pageSize = 5;

// 接收查询参数

$keywords = $_GET['keywords'] ?? '';

// 1 -- 0

// 2 -- 5

// 3 -- 10

$data = [];

try {

$pdo = new PDO('mysql:host=localhost:3306;dbname=test_ajax_pager',

'root',

'123456',

[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]

);

// 请求mysql 查询记录总数

$sql = 'SELECT count(*) AS aggregate FROM test_users';

if (strlen($keywords) > 0) {

$sql .= ' WHERE username like ?';

}

$stmt = $pdo->prepare($sql);

if (strlen($keywords) > 0) {

$stmt->bindValue(1, '%' . $keywords . '%', PDO::PARAM_STR);

}

$stmt->execute();

$total = $stmt->fetch(PDO::FETCH_ASSOC)['aggregate'];

// 计算最大页码,设置页码边界

$minPage = 1;

$maxPage = ceil($total / $pageSize); // 3.6

$pageNo = max($pageNo, $minPage);

$pageNo = min($pageNo, $maxPage);

$offset = ($pageNo - 1) * $pageSize;

$sql = 'SELECT id, username, age, gender, phone, address, created_at FROM test_users';

if (strlen($keywords) > 0) {

$sql .= ' WHERE username like ?';

}

$sql .= ' LIMIT ?, ?';

$stmt = $pdo->prepare($sql);

if (strlen($keywords) > 0) {

$stmt->bindValue(1, '%' . $keywords . '%', PDO::PARAM_STR);

$stmt->bindValue(2, (int)$offset, PDO::PARAM_INT);

$stmt->bindValue(3, (int)$pageSize, PDO::PARAM_INT);

} else {

$stmt->bindValue(1, (int)$offset, PDO::PARAM_INT);

$stmt->bindValue(2, (int)$pageSize, PDO::PARAM_INT);

}

$stmt->execute();

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

$data = [

'code' => 1,

'msg' => 'ok',

'rows' => $results,

'total_records' => (int)$total,

'page_number' => (int)$pageNo,

'page_size' => (int)$pageSize,

'page_total' => (int)$maxPage,

];

} catch (PDOException $e) {

$data = [

'code' => 0,

'msg' => $e->getMessage(),

'rows' => [],

'total_records' => 0,

'page_number' => 0,

'page_size' => (int)$pageSize,

'page_total' => 0,

];

}

header('Content-type: application/json');

echo json_encode($data);

数据库结构test_ajax_pager.sql

/*

Navicat MySQL Data Transfer

Source Server : 127.0.0.1

Source Server Type : MySQL

Source Server Version : 80012

Source Host : localhost:3306

Source Schema : test_ajax_pager

Target Server Type : MySQL

Target Server Version : 80012

File Encoding : 65001

Date: 18/11/2018 10:56:13

*/

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for test_users

-- ----------------------------

DROP TABLE IF EXISTS `test_users`;

CREATE TABLE `test_users` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(50) NOT NULL DEFAULT '',

`age` tinyint(4) NOT NULL DEFAULT '1',

`gender` varchar(30) NOT NULL DEFAULT 'Not Specified',

`phone` varchar(50) NOT NULL DEFAULT '',

`address` varchar(255) NOT NULL DEFAULT '',

`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of test_users

-- ----------------------------

BEGIN;

INSERT INTO `test_users` VALUES (1, 'zhangsan', 20, 'Male', '13888888888', 'Chaoyang Beijing', '2018-11-18 09:52:23');

INSERT INTO `test_users` VALUES (2, 'lisi', 30, 'Female', '13899999999', 'Haidian Beijing', '2018-11-18 09:53:30');

INSERT INTO `test_users` VALUES (3, 'wangwu', 32, 'Male', '13877777777', 'Changping Beijing', '2018-11-18 09:54:15');

INSERT INTO `test_users` VALUES (4, 'zhaoliu', 28, 'Male', '13866666666', 'Shunyi Beijing', '2018-11-18 09:54:34');

INSERT INTO `test_users` VALUES (5, 'tianqi', 23, 'Not Specified', '13855555555', 'Changping Beijing', '2018-11-18 09:55:18');

INSERT INTO `test_users` VALUES (6, 'liba', 33, 'Female', '13844444444', 'Chaoyang Beijing', '2018-11-18 09:55:53');

INSERT INTO `test_users` VALUES (7, 'wangjiu', 45, 'Not Specified', '13833333333', 'Hongkou Shanghai', '2018-11-18 09:56:21');

INSERT INTO `test_users` VALUES (8, 'wanger', 26, 'Male', '13777777777', 'Hangzhou', '2018-11-18 09:57:10');

INSERT INTO `test_users` VALUES (9, 'liyi', 25, 'Not Specified', '13555555555', 'Shanghai', '2018-11-18 09:58:38');

INSERT INTO `test_users` VALUES (10, 'zhangxiaosan', 21, 'Not Specified', '13111111111', 'Beijing', '2018-11-18 09:59:09');

INSERT INTO `test_users` VALUES (11, 'lixiaosi', 32, 'Male', '13222222222', 'Shanghai', '2018-11-18 09:59:30');

INSERT INTO `test_users` VALUES (12, 'wangxiaowu', 33, 'Not Specified', '13812345678', 'Beijing', '2018-11-18 10:01:44');

INSERT INTO `test_users` VALUES (13, 'zhaoxiaoliu', 44, 'Not Specified', '13612345678', 'Shanghai', '2018-11-18 10:02:10');

INSERT INTO `test_users` VALUES (14, 'tianxiaoqi', 52, 'Female', '18612345678', 'Beijing', '2018-11-18 10:02:35');

INSERT INTO `test_users` VALUES (15, 'lixiaoba', 36, 'Not Specified', '18712345678', 'Shanghai', '2018-11-18 10:02:57');

INSERT INTO `test_users` VALUES (16, 'wangxiaojiu', 42, 'Not Specified', '18212345678', 'Hangzhou', '2018-11-18 10:03:23');

INSERT INTO `test_users` VALUES (17, 'wangxiaoer', 31, 'Male', '18512345678', 'Suzhou', '2018-11-18 10:03:51');

INSERT INTO `test_users` VALUES (18, 'lixiaoyi', 28, 'Female', '18787654321', 'Guangzhou', '2018-11-18 10:04:22');

COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

标签:11,users,18,xhr,Ajax,let,应用,test,原理

来源: https://www.cnblogs.com/chenyingying0/p/12190493.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值