一直知道 ajax 但是尚未真正了解, 这次看了慕课网的《Ajax全接触》,算是有所收获,入了个门。

需要用到php,因为 Ajax也是向服务器请求(不知道这么解释对不对), 所以还需要配置环境, 我用的是 phpstudy ,很简单好用

请先了解过 http

(没创建数据库, 所以并没有真正的保存)


随便写个静态页面

<h1>员工查询</h1> <label>请输入员工编号:</label>
<input type="text" id="keyword" />
<button id="search">查询</button>
<p id="searchResult"></p> <h1>员工新建</h1> <label>请输入员工姓名:</label>
<input type="text" id="staffName" /><br>
<label>请输入员工编号:</label>
<input type="text" id="staffNumber" /><br>
<label>请选择员工性别:</label>
<select id="staffSex">
<option>女</option>
<option>男</option>
</select><br>
<label>请输入员工职位:</label>
<input type="text" id="staffJob" /><br>
<button id="save">保存</button>
<p id="createResult"></p>
写一个叫 server.php 的页面,作用是响应前端发送的请求

<?php //设置页面内容是html编码格式是utf-8
header("Content-Type: text/plain;charset=utf-8"); //定义一个多维数组,包含员工的信息,每条员工信息为一个数组
$staff = array
(
array("name" => "洪七", "number" => "101", "sex" => "男", "job" => "总经理"),
array("name" => "郭靖", "number" => "102", "sex" => "男", "job" => "开发工程师"),
array("name" => "黄蓉", "number" => "103", "sex" => "女", "job" => "产品经理")
); //判断如果是get请求,则进行搜索;如果是POST请求,则进行新建
//$_SERVER是一个超全局变量,在一个脚本的全部作用域中都可用,不用使用global关键字
//$_SERVER["REQUEST_METHOD"]返回访问页面使用的请求方法
if ($_SERVER["REQUEST_METHOD"] == "GET") {
search();
} elseif ($_SERVER["REQUEST_METHOD"] == "POST"){
create();
} //通过员工编号搜索员工
function search(){ //检查是否有员工编号的参数
//isset检测变量是否设置;empty判断值为否为空
//超全局变量 $_GET 和 $_POST 用于收集表单数据
if (!isset($_GET["number"]) || empty($_GET["number"])) {
echo "参数错误";
return;
} //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
//global 关键词用于访问函数内的全局变量
global $staff; //获取number参数
$number = $_GET["number"]; $result = "没有找到员工。"; //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果
// 把 $staff 循环给新的变量 $value, 然后可以做一些操作
foreach ($staff as $value) {
if ($value["number"] == $number) {
$result = "找到员工:员工编号:" . $value["number"] . ",员工姓名:" . $value["name"] .
",员工性别:" . $value["sex"] . ",员工职位:" . $value["job"];
break;
}
}
echo $result;
} //创建员工
function create(){
//判断信息是否填写完全
if (!isset($_POST["name"]) || empty($_POST["name"])
|| !isset($_POST["number"]) || empty($_POST["number"])
|| !isset($_POST["sex"]) || empty($_POST["sex"])
|| !isset($_POST["job"]) || empty($_POST["job"])) {
echo "参数错误,员工信息填写不全";
return;
}
// 没做数据库: 获取POST表单数据并保存到数据库 //提示保存成功
echo "员工:" . $_POST["name"] . " 信息保存成功!";
}
现在开始是js部分
// GET 请求的查询
document.getElementById("search").onclick = function() { // 创建一个 XMLHttpRequest对象(老版本 ie5\6 是 ActiveXObject)
var request = new XMLHttpRequest(); // 开始一个GET 请求, server.php就是上面的那个php 文件, true表示异步 默认就是true。
// GET 请求都是用 url来传输,所以就获取输入在 #keyword 中的数字, 来和php 中的 $number 对应查找
request.open("GET", "server.php?number=" + document.getElementById("keyword").value, true); /**
* open() 和 send() 是一起使用的
* 用来向 open() 中的请求体(server.php) 发送请求
* 具体请自行搜索 send()的语法,比较长
*/
request.send(); /**
* send() 后会触发 onreadystatechange
* 结束时会把 readyState 变成4
* 而页面正确时的 status 是200
* 所以,依此做一个判断
*/
request.onreadystatechange = function() {
if (request.readyState===4) {
if (request.status===200) {
// responseText 是 server.php 的返回值
document.getElementById("searchResult").innerHTML = request.responseText;
} else {
alert("发生错误:" + request.status);
}
}
} } // POST 请求的保存
document.getElementById("save").onclick = function() { var request = new XMLHttpRequest(); request.open("POST", "server.php"); // 是保存, 所以获取各值, & 是连接数据的格式?
var data = "name=" + document.getElementById("staffName").value
+ "&number=" + document.getElementById("staffNumber").value
+ "&sex=" + document.getElementById("staffSex").value
+ "&job=" + document.getElementById("staffJob").value; // POST 请求时,在 open() send() 中间要设立一个头信息
request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 将 data 传送过去
request.send(data); request.onreadystatechange = function() {
if (request.readyState===4) {
if (request.status===200) {
document.getElementById("createResult").innerHTML = request.responseText;
} else {
alert("发生错误:" + request.status);
}
}
} }

一个简单的Ajax 差不多就是这样了

数据还可以用JSON 的方式, 仅需要改动几个地方

 // php 中 将 echo 的值改成 JSON格式,例如:

	if (!isset($_GET["number"]) || empty($_GET["number"])) {
echo $jsonp . '({"success":false,"msg":"参数错误"})';
return;
} // js 中
// 触发 onreadystatechange 后, 它的回调函数里创建一个调用了 JSON.parse 方法的变量来保存 server.php的返回值,例如: var data = JSON.parse(request.responseText);
// data.success 的 success 也是 php 里设定的
// alert 一下
alert(data); // 出了两个 object...
// 那试试 console.log 吧
console.log(data); // Object {success: true, msg: "找到员工:员工编号:101, 员工姓名:洪七,员工性别:男, 员工职位:总经理"}
if (data.success) {
document.getElementById('searchResult').innerHTML = data.msg;
} else {
document.getElementById('searchResult').innerHTML = '出现错误:' + data.msg;
}
// 这样就可以调用 php 文件里返回的值了

视频中还有讲到 jQuery中的Ajax写法 和 jQuery中跨域时怎么请求

jQuery 的写法很简单, 比原生的简便太多了。 我也就不总结啦,

若有不合适之处, 还望指点一二

(:з」∠)

初学 Ajax(涉及 php)的更多相关文章

  1. 初学Ajax(三)

    $.ajax() $.ajax()是所有ajax方法中最底层的方法,所有其他方法都是基于$.ajax()方法的封装.这个方法只有一个参数,传递一个各个功能键值对的对象. $.ajax()方法对象参数表 ...

  2. 初学Ajax(二)

    $.get()和$.post() .load()方法是局部方法,因为它需要一个包含元素的jQuery对象作为前缀.而$.get()和$.post()是全局方法,无须指定某个元素.对于用途而言,.loa ...

  3. 初学Ajax(一)

    以下文字根据李炎恢——jQuery教程整理而成. Ajax全称为:“Asynchronous JavaScript and XML”(异步JavaScript和XML),它并不是JavaScript的 ...

  4. 初学Ajax

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和 ...

  5. 深入理解ajax系列第一篇——XHR对象

    × 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...

  6. AJAX文档

    AJAX 文档 AJAX开发简略.................................................................................... ...

  7. 正确AJAX了解该技术的,创建,应用

    ajax认识: 1. ajax这是间client与server机制.但这一机制是在前台的,利用前台的闲置功能,来进行前台与后台的数据交流,以达到增强用户体检.降低server压力,更有效的利用带宽的效 ...

  8. ajax原理图解

    Ajax 原理图解 摘自: http://www.nowamagic.net/ajax/ajax_PicForAjaxPrinciple.php Ajax其实已经使用很久了,但一直也没有时间正经的找本 ...

  9. 关于AJAX使用中出现中文乱码的问题

    自己初学AJAX,遇到一个棘手的bug就是xmlHttp.open("get",url,false);url里面有中文,结果出现乱码.不过最后在百度,和诸位博主的帮助下,成功解决了 ...

随机推荐

  1. BZOJ 4698: Sdoi2008 Sandy的卡片 后缀数组 + RMQ + 查分

    题目描述 Sandy和Sue的热衷于收集干脆面中的卡片. 然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型. 每一张卡片都由一些数字进行标记,第i张卡片的 ...

  2. 【转载】InputStreamReader和OutputStreamWriter 的区别和用法

    一.InputStreamReader 用于将一个字节流中的字节解码成字符 , 用法如下: @Test public void Test19() throws Exception { InputStr ...

  3. python PIL图像处理-图片上添加文字

    首先需要安装库pillow cmd安装命令:pip install pillow 安装完后,编写脚本如下: from PIL import Image, ImageDraw, ImageFont de ...

  4. 01-Linux命令基础-第01天(命令基础,软件安装与卸载、磁盘管理)

    01-   Linux初步 最早一直是单道程序设计模型的操作系统 69年贝尔实验室决定开发多道程序设计模型的操作系统 Multics计划 (失败了) x86 IA(Intel Architecture ...

  5. Vue学习之路第二十篇:Vue生命周期函数-组件创建期间的4个钩子函数

    1.每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周期钩子的函数 ...

  6. nyoj24-素数 距离问题

    素数距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素数 ...

  7. [jzoj 5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争 (博弈论+dp)

    传送门 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x ...

  8. sqldependency类轮询功能

    System.Data.SqlClient.SqlDependency类为我们提供了一个关于sql2005的很好的功能 ,虽然这个东西限制有很多很多,但还是有很实用价值的. 我们先看一个演示例子: 例 ...

  9. POJ 1966

    求的是无向图的点连通度.开始便想到网络流,既然选的是点,当然就要拆点加边了.但无论如何也不敢往枚举源汇点的方向想,因为网络流复习度很高.看看网上大牛的,都是枚举,再看数据,原来N才50个点,枚举无压力 ...

  10. eclipse怎样开启/关闭代码提示功能

    把以下红色框中的勾勾选上就是使用代码提示功能,不选就是关闭.