Ajax作业

2019-12-28  本文已影响0人  Summerdise

1.

如果要处理 $.ajax() 得到的数据,则需要使用回调函数:beforeSend、error、dataFilter、success、complete

2.

var ajax = new XMLHttpRequest();
ajax.prototype.request(url,style,fun) = request(url,style,fun);
ajax.prototype.request(url,style,fun,text) = request(url,style,fun,text);

function request(url,style,fun){
  this.open(style,url,true);
  myCallback(this);
}
function request(url,style,fun,text){
  this.send(style,url,text,true);
  myCallback(this);
}
function myCallback(xhr) { 
   alert(xhr.responseText); 
 }

 ajax.request(“somefile.txt”, ”get”, myCallback);
 ajax.request(“script.php”, ”post”, myCallback, ”first=John&last=Smith”);

3.

原因:(3个原因同时满足,才可能产生跨域问题)

4.

  1. JSONP方式解决跨域问题
    jsonp解决跨域问题是一个比较古老的方案(实际中不推荐使用),这里做简单介绍(实际项目中如果要使用JSONP,一般会使用JQ等对JSONP进行了封装的类库来进行ajax请求)
    实现过程:
  1. CORS解决跨域问题
    各个后台语言都有对应配置以用于解决跨域问题。PHP后台配置、Node.js后台配置(express框架)、JAVA后台配置、JAVA Spring Boot配置、NET后台配置。
  2. 代理请求方式解决接口跨域问题
    与前面的方法不同,前面CORS是后端解决,而这个主要是前端对接口进行代理,也就是:
  1. OPTIONS预检的优化
Access-Control-Max-Age:

这个头部加上后,可以缓存此次请求的秒数。
在这个时间范围内,所有同类型的请求都将不再发送预检请求而是直接使用此次返回的头作为判断依据。
非常有用,可以大幅优化请求次数。

5.

var request = function(options) {
    options = options || {};
    options.data = options.data || {};
    var json = options.jsonp ? jsonp(options) : json(options);
    function json(options) {
        options.type = (options.type || 'GET').toUpperCase();
        options.data = formatoptions(options.data);
        var xhr = null;
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObjcet('Microsoft.XMLHTTP');
        };
    }

    function ajax(url, success, fail) {
        var xhr = null;
        xhr = new XMLHttpRequest()
        xhr.open('get', url, true)
        xhr.send(null);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    success(xhr.responseText);
                } else { // fail
                    fail && fail(xhr.status);
                }
            }
        }
    }
    json.ajax(options.url,options.success,options.fail);

}
options = {
    url: "",
    method: "",
    headers: {}, // 传给
    data: "", // 传给服务器的参数
    success: function(result) {}, // 请求成功后调用此方法
    fail: function(error) {} // 请求失败或出错后调用此方法
}
上一篇下一篇

猜你喜欢

热点阅读