校本化HTTP-原生js

2016-09-24  本文已影响0人  冯傻大粗

这个笔记是我学习js犀牛书和一个师姐的慕课网学习笔记和js高级编程三个东西的总结

1,基本概念


2,使用XMLHttpRequest


2.1 新建对象

第一步是要先

var request = new XMLHttpRequest();
//注意,ie6下有不一样的地方

2.2 指定请求

request.open("get","data.json")

2.3(可选)请求头

request.setRequestHeader("content-Type","text/plain");

2.4 向服务器发送

request.send(null);

3,取得响应


含义
0 open()尚未调用
1 open()已调用
2 接收到头信息
3 接收到相应主体
4 相应完成

*当知道send完成了,就要检测传回来的东西的状态,这时候就要一个status和statusText属性以数字和文本的形式返回状态码

附上一个完整的代码演示

function ajax(url, fnSucc, fnFaild)
{
    //1.创建Ajax对象
    var oAjax=null;
    
    if(window.XMLHttpRequest)
    {
        oAjax=new XMLHttpRequest();
    }
    else
    {
        oAjax=new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    //2.连接服务器
    oAjax.open('GET', url, true);
    
    //3.发送请求
    oAjax.send();
    
    //4.接收服务器的返回
    oAjax.onreadystatechange=function ()
    {
        if(oAjax.readyState==4) //完成
        {
            if(oAjax.status==200)   //成功
            {
                fnSucc(oAjax.responseText);
            }
            else
            {
                if(fnFaild)
                    fnFaild(oAjax.status);
            }
        }
    };
}

3.1 同步相应

把false作为第三个参数传递给open(),那么send()方法将会阻塞到完成请求。所以同步相应下就不需要使用事件处理程序。仅仅需要检查status和responseText属性会可以了

3.2与后台交互数据实例

客户端代码之search

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){ 
        var data=JSON.parse(request.responseText);//解析服务器返回的信息;
        if(data.success){ 
             document.getElementById("searchResult").innerHTML=data.msg; } 
        else { document.getElementById("searchResult").innerHTML="出现错误:"+data.msg; } }
      else{ alert("发生错误"+request.status); } 
   }
 } 
} 

客户端代码之保存

document.getElementById("save").onclick=function(){
 console.log('haha'); 
var add_staff=new XMLHttpRequest();
 add_staff.open("POST","server.php"); 
var data="number="+document.getElementById("staffnumber").value+"&name="+document.getElementById("staffname").value+"&sex="+document.getElementById("staffsex").value+"&job="+document.getElementById("staffjob").value;
add_staff.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); add_staff.send(data);
 add_staff.onreadystatechange=function () { 
if(add_staff.readyState==4){ 
if(add_staff.status===200){ 
var data=JSON.parse(add_staff.responseText); 
if(data.success){ 
document.getElementById("createResult").innerHTML=data.msg; 
}
 else { 
document.getElementById("createResult").innerHTML = "出现错误" + data.msg; 
}
 } 
else{ alert("发生错误"+add_staff.status); } 
} 
} }

3.3,表单数据的请求头

默认情况下,html表单通过post方法发送给服务器,而编码后的表单数据用做请求主体。

上一篇下一篇

猜你喜欢

热点阅读