ajax的使用方法

对于前端工程师来说,ajax是非常重要的一门技术。由他的全称就可以看出来,他是用来干什么的。即Asynchronous Javascript And XML 异步的JavaScript和XML。是指一种创建交互式网页应用的网页开发技术。
其实再使用的时候并不是很难,只要掌握了他的几个方法使用,就可以直接用,做出有异步交互效果的页面。
下面我就来说说怎么使用:
首先我们要创建一个XMLHttpRequest这个对象,代码就是var request = new XMLHttpRequest(); 这样就有了这个对象,然后就可以使用这个对象的方法,在使用之前我们需要了解http请求是什么东西,他是一个协议,简单来说就是网络请求需要这个协议进行控制,我们要根据http请求的状态来判断我们下一步该做什么工作。http他有几个状态码是我们必须先要了解的。他的数字可能去5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受。这个也是我们最希望看到的。
3xx:重定向响应类,为了完成指定的动作,必须接收进一步的处理。
4xx:客户端错误,客户请求包含语法错误或者是不能正确的执行。
5xx:服务端错误,服务器不能正确执行一个正确的请求。
这些状态码是作为我们必须要知道的。必须要四级下来的。
我们先了解完这些知识后,接着我们刚刚创建的xhr对象。
我把XMLHttpRequest对象简称为xhr。
创建出这个request对象之后他有几个方法。首先当然是先要打开他使用他了。那这个方法就是open(post/get,URL,Asynchronous)这个方法有三个参数,第一个是请求的方式,要该怎么请求。有post和get请求这两个请求的方式是有区别的;有以下几点:
1、get是从服务器上获取数据,post是向服务器传送数据。
2、get是把参数数据队列加到提交表单的action属性所指的URL当中,值和表单内的字段一一对应。在URL中可以看到,post是通过http post机制,将表单内各个字段与其内容放置在html header内一起传送到action属性所指的URL地址,用户看不到这个过程,简单来说就是地址栏的get数据是可以看到的,post是看不到的。3、get传送的数据量较小,不能大于2kb。post传送的数据量较大,一般被默认为不受限制。但理论上IIs4中最大量为80kb,IIS5中为100kb,
这里的IIS就是网络信息服务的意思Internet Information Service。
4、get安全性比较低,post安全性较高。但是执行效率却比post方法好。
使用的时候有下面两个建议:
1、get方式的安全性较post方式要差些,包含机密信息的话,建议用post数据提交方式。
2、在做数据查询时,建议用get方式;而在做数据添加、修改或删除时、建议用post方式。
接着request的方法open()完了之后就要发送数据了。所以就是send()方法;
request.send();
下面是一个例子:
request.open("POST","create.php,"true);
request.setRequestHeader("Content-type","application/x-www-from-urlencoded");
request.send("name=王二狗&sex=男");

这里面的第二行代码是设置http的头信息告诉服务器我们发送的是一个表单。
发送完之后,我们就等着服务器的回复信息了。我们用request.onreadystate和request.status这里的状态就是我前面说的http状态,准备状态这是onreadyState状态信息
有知道了这两个我们就有了下面的代码request.onreadystatechange = function(){
if(request.readyState === 4 && request.status === 200){
//然后就可以接收收到的数据了request.responseText
var data = JSON.parse(request.responseText);
if(data.success){
document.getElementById("serchReasult").innerHTML = data.msg;
}else{
document.getElementById("searchResult").innerHTML = '出现错误:'+data.msg;
}
}else{
alert("发生错误:"+request.status);
}
}

里面验证都成功过之后就可以接收数据了,可以用request.responseText进行接收,也可以使用其他的接收,具体可以参考文档。接收到之后若是json格式的数据我们用JSON.parse(data)这个方法转换一下,就得到我们所需的数据了,我做的是若数据成功就把这个数据显示到页面上,没有则显示错误。
相信大家都能看懂,我把一个完整的服务端和前端的代码都贴出来,大家都看一下,做个参考
这是客户端代码:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="textml; charset=utf-8">
<title>Demo</title>
<style>
body, input, select, button, h1 {
    font-size: 28px;
    line-height:1.7;
}
</style>    
</head>

<body>

<h1>员工查询</h1>

<label>请输入员工编号:</label>
<input type="text" id="keyword" />
<button id="search">查询<tton>
<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>
<lect><br>
<label>请输入员工职位:</label>
<input type="text" id="staffJob" /><br>
<button id="save">保存<tton>
<p id="createResult"></p>

<script>
document.getElementById("search").onclick = function() { 
    var request = new XMLHttpRequest();
    request.open("GET", "server.php?number=" + document.getElementById("keyword").value);
    request.send();
    request.onreadystatechange = function() {
        if (request.readyState===4) {
            if (request.status===200) { 
                document.getElementById("searchResult").innerHTML = request.responseText;
            } else {
                alert("发生错误:" + request.status);
            }
        } 
    }
}

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;
    request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    request.send(data);
    request.onreadystatechange = function() {
        if (request.readyState===4) {
            if (request.status===200) { 
                document.getElementById("createResult").innerHTML = request.responseText;
            } else {
                alert("发生错误:" + request.status);
            }
        } 
    }
}
</script>
</body>
<html>
这是服务端代码用php写的。
<?php
//设置页面内容是html编码格式是utf-8
header("Content-Type: text/plain;charset=utf-8"); 
//header("Content-Type: application/json;charset=utf-8"); 
//header("Content-Type: text/xml;charset=utf-8"); 
//header("Content-Type: textml;charset=utf-8"); 
//header("Content-Type: application/javascript;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 '{"success":false,"msg":"参数错误"}';
        return;
    }
    //函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
    //global 关键词用于访问函数内的全局变量
    global $staff;
    //获取number参数
    $number = $_GET["number"];
    $result = '{"success":false,"msg":"没有找到员工。"}';

    //遍历$staff多维数组,查找key值为number的员工是否存在,如果存在,则修改返回结果
    foreach ($staff as $value) {
        if ($value["number"] == $number) {
            $result = '{"success":true,"msg":"找到员工:员工编号:' . $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 '{"success":false,"msg":"参数错误,员工信息填写不全"}';
        return;
    }
    //TODO: 获取POST表单数据并保存到数据库

    //提示保存成功
    echo '{"success":true,"msg":"员工:' . $_POST["name"] . ' 信息保存成功!"}';
}

?>

其实ajax用jquery更加简单我直接附上代码大家一看就懂了

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="textml; charset=utf-8">
<title>Demo</title>
<style>
body, input, select, button, h1 {
    font-size: 28px;
    line-height:1.7;
}
</style>    
</head>

<body>

<h1>员工查询</h1>

<label>请输入员工编号:</label>
<input type="text" id="keyword" />
<button id="search">查询<tton>
<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>
<lect><br>
<label>请输入员工职位:</label>
<input type="text" id="staffJob" /><br>
<button id="save">保存<tton>
<p id="createResult"></p>

<script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>
<script>
$(document).ready(function(){ 
    $("#search").click(function(){ 
        $.ajax({ 
            type: "GET",    
            url: "http://127.0.0.1:8080/ajaxdemo/serverjson2.php?number=" + $("#keyword").val(),
            dataType: "json",
            success: function(data) {
                if (data.success) { 
                    $("#searchResult").html(data.msg);
                } else {
                    $("#searchResult").html("出现错误:" + data.msg);
                }  
            },
            error: function(jqXHR){     
               alert("发生错误:" + jqXHR.status);  
            },     
        });
    });

    $("#save").click(function(){ 
        $.ajax({ 
            type: "POST",   
            url: "serverjson.php",
            data: {
                name: $("#staffName").val(), 
                number: $("#staffNumber").val(), 
                sex: $("#staffSex").val(), 
                job: $("#staffJob").val()
            },
            dataType: "json",
            success: function(data){
                if (data.success) { 
                    $("#createResult").html(data.msg);
                } else {
                    $("#createResult").html("出现错误:" + data.msg);
                }  
            },
            error: function(jqXHR){     
               alert("发生错误:" + jqXHR.status);  
            },     
        });
    });
});
</script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值