• JavaScript------脚本化HTTP


    以下:

    1、HTTP:超文本传输协议;

    2、Web应用架构:

      Ajax (JSONP):请求服务器  

      Comet: 服务器推送;

    3、XMLHttpRequest请求:

           var requerst = new XMLHttpRequest(); //实例化

         request.open(method,url);//指定请求;

         //method:指定HTTP方法或动作;包括:GET POST DELETE HEAD OPTIONS PUT

         //url:相对于文档的url或使用绝对路径URL,但是不能跨域;

         //第三个是可选参数 默认true表示异步; false表示同步

        request.setRequestHeader('Content-Type','application/json;charset=UTF-8');//设置请求头 

        request.onreadystatechange = function(){

            if(request.readyState=== 4 || requset.status === 200){

              request.getResponseHeader('Content-Type');//响应类型

              request.responseText;//文本形式

              request.responseXML;//Document形式

              //dosomething 一般传递给回调函数

            }

        }//响应处理程序 顺序无所谓

        request.send(body);//发送请求;此时才会启动网络,但是以上的顺序不能变; 

               //上传带有文件的表单数据:Content-Type需要使用multipart/form-data来POST提交;

        //或(XHR2)使用FormData对象;多次使用append()放入请求参数。支持File和字符串,Blog等;

    4、使用<script>发送请求JSONP:

       一个根据指定url发送JSONP请求,然后把响应数据传递给回调函数的例子:

         //在URL中添加一个名为jsonp的查询参数,用于指定请求的回调函数的名称

    function getJSONP(url,callback){
      //为请求创建一个唯一的回调函数名称 
      var cbnum = "cb"+getJSONP.counter++;      
      var cbname = "getJSONP."+cbnum ;
      //使用jsonp作为参数名(有的是callback)
      if(url.index('?') === -1)
            url+='?jsonp=' + cbname;
       else
            url+='&jsonp=' + cbname;
      //创建script元素用于发送请求
      var script = document.createElement('script');
      //回调函数执行
      getJSONP[cbnum] = function(response){
             try{
          callback(response); }
         finally{
          delete getJSONP[cbnum]; //删除函数
          script.parentNode.removeChild(script);//移除元素;
         } } script.src = url; //立即请求;
      document.body.appendChlid(script); //添加到文档 } getJSONP.counter
    = 0;

    一个通用的例子:

    var ax = function(url,method,async,data,contentType,successfn,errorfn){
        data = (data==null || data=="" || typeof(data)=="undefined")? {"date": new Date().getTime()} : data;
        async = (async==null || async=="" || typeof(async)=="undefined")? true : async;
        method = (method==null || method=="" || typeof(method)=="undefined")? 'GET' : method;
        var request = new XMLHttpRequest();
        request.open(method,url,async);
        if(contentType==null || contentType=="" || typeof(contentType)=="undefined"){
            //do noting 浏览器会根据参数数据自动设置
        }else{
            //"application/json;charset=utf-8"
            requst.setRequestHeader("Content-Type",contentType);    
        }
        //响应:
        request.onreadystatechange = function(){
            if(request.readyState === 4 ){
                //响应完成
                //获取响应类型,服务器端给的
                var type = request.getResponseHeader("Content-Type");
                var resp = requset.responseText;
                if(type.indexOf('xml') !==-1 && requset.responseXML){
                     resp = requset.responseXML;
                }else if(type.indexOf('json') !==-1 ){
                    resp = JSON.parse(resp);
                }else{
                    //text类型 返回
                }
                if(request.status === 200){
                    //而且成功了
                    successfn(resp);
                }else if(request.status > 399){
                    //但是有错误
                    errorfn(resp);
                }
            }
        }
        //request.overrideMimeType("application/json;charset=utf-8"); //强制响应类型为json
        if(contentType.indexOf('json') !==-1 || contentType.indexOf('JSON') !==-1){
            request.send(JSON.stringify(data));
        }else{
            request.send(data);
        }
        
    };

    可根据实际情况改写;

    5、服务端推送的Comet技术:使用EventSource对象,不成熟。。。。。。

  • 相关阅读:
    nginx把POST转GET请求解决405问题
    Redis安装与配置
    SQL语句-SELECT语句
    SQL语句-delete语句
    SQL语句-UPDATE语句
    SQL语句-INSERT语句
    SQL语句-create语句
    MySQL权限详解
    GTID复制详解
    ansible-playbook的应用实例
  • 原文地址:https://www.cnblogs.com/liangblog/p/6030491.html
Copyright © 2020-2023  润新知