zoukankan      html  css  js  c++  java
  • Ajax

      术语Ajax描述了一种主要使用脚本操纵HTTP的Web应用架构,浏览器再XMLHttpRequest类上定义了它们的HTTP API,这个类的每个实例都表示一个独立的请求/响应对

    一个HTTP请求由4部分组成:

    • HTTP请求方法或“动作”(verb)
    • 正在请求的URL
    • 一个可选的请求头集合,其中可能包含身份验证信息
    • 一个可选的请求主体

    服务器返回的HTTP响应包含3部分:

    • 一个数字和文字组成的状态码,用来显示请求的成功和失败
    • 一个响应头集合
    • 响应主体

    1.指定请求

    var request = new XMLHttpRequest();
    request.open("GET","index.php");
    如果有请求头的话,请求进程的下个步骤是设置它。例如,POST请求需要"Content-Type"头指定请求主题的MIME类型:
    request.setRequestHeader("Content-Type","text/plain");
    request.send(null);

    2.取得响应

      为了在响应准备就绪时得到通知,必须监听XMLHttpRequest对象上的readystatechange事件,但之前必须理解readyState属性,readyState是一个整数,它制定了HTTP请求的状态,下面是值对应的含义

    0 -> open()尚未调用
    1 -> open()已经调用
    2 -> 接收到头信息
    3 -> 接收到响应体
    4 -> 响应完成

      理论上,每次readyState属性的改变都会触发这个readystatechange事件。当readyState值改变为4或服务器响应完成时,所有浏览器都触发readystatechange事件,为了监听readystatechange事件,需把事件处理函数设置为XMLHttpRequest对象的onreadystatechange属性。

    获取HTTP响应的onreadystatechange示例

    var request = new XMLHttpRequest();       //创建新请求
    request.open('GET','index.php');          //指定待获取的URL
    request.onreadystatechange = function(){ //定义事件处理程序
      //如果请求完成,则它是成功的
      if(request.readyState === 4 & request.status === 200){
        var type = request.getResponseHeader("Content-Type")
        if(type.match(/^text/)){ //确保响应是文本
          callback(request.responseText); //把它传递给回调函数
        }
      }
    };
    request.send(null); //立即发送请求

     3.post请求示例

    var Data = {
        "name1": "value1",
        "name2": "value2"
    } Data = (function(Obj){ // 转成post需要的字符串形式 var str = ""; for(var attr in Obj){ str += attr + "=" + Obj[attr] + "&" } return str; //此时的str格式为 "name1=value1&name2=value2&" })(Data); var request = new XMLHttpRequest(); //创建XHR对象实例 request.open("POST", "请求接口地址", true); request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //设置请求头信息 request.onreadystatechange = function(){ var XMLHttpReq = request; if (XMLHttpReq.readyState == 4) { if (XMLHttpReq.status == 200) { var text = XMLHttpReq.responseText; //获取响应的文本
           var json = eval('('+text+')') //json字符串转json对象 console.log(text); //控制台打印数据
           console.log(json); //控制台打印数据 } } }; xhr.send(Data); //发送数据
  • 相关阅读:
    D3D中的渲染状态简介
    D3D HOOK实现透视讲解
    引入外部文件的时候为什么省略http:
    hbase java Api练习
    [待解决]ColumnPrefixFilter 不能过滤出全部满足条件的,
    代码风格
    eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7
    hbase练习题
    hive安装
    脚本 sh 和 ./ 的区别,exec和source
  • 原文地址:https://www.cnblogs.com/caichunbao/p/6624588.html
Copyright © 2011-2022 走看看