在发出请求之前重写ajax请求以更改url

时间:2018-06-27 04:50:43

标签: jquery ajax override

我一直在编写一个脚本,该脚本可以在互联网不可用时将AJAX请求重定向到其他服务器,在互联网可用时将请求保持在同一路由 我的脚本执行的操作相同,只要数据连接不可用,它将脚本替换为本地服务器ip,但这不会影响AJAX的功能,

    var REMOTE_SERVER="http://opensupermall";
var LOCAL_SERVER="http://127.0.0.1:909";
var custom_url="";

var open = window.XMLHttpRequest.prototype.open,  
  send = window.XMLHttpRequest.prototype.send;

function openReplacement(method, url, async, user, password) {  
    custom_url = url;
  if(navigator.onLine){
    custom_url = url.replace(REMOTE_SERVER,LOCAL_SERVER);
  }

   console.log("openReplacement:"+custom_url);
  this._url = custom_url;
  return open.apply(this, arguments);
}

function sendReplacement(data) {  
  if(this.onreadystatechange) {
    this._onreadystatechange = this.onreadystatechange;
  }

  console.log('Request sent to:'+this._url);

  this.onreadystatechange = onReadyStateChangeReplacement;
  return send.apply(this, arguments);
}

function onReadyStateChangeReplacement() {  
  console.log('Url Changed to: ', this._url);
  if(this._onreadystatechange) {
    return this._onreadystatechange.apply(this, arguments);
  }
}
window.XMLHttpRequest.prototype.open = openReplacement;  
window.XMLHttpRequest.prototype.send = sendReplacement;

我需要建议,这是我正在做的可能吗?可以跳过ajax请求吗?

我想在每个ajax请求上更改URL!

你能帮我吗?如果有可能在到达服务器之前重写ajax请求,此代码有什么问题?

1 个答案:

答案 0 :(得分:0)

您可以使用此代码块(jquery ajax)(您可以创建实用程序javascript文件,并将这些代码放置在该util脚本中,然后在任何地方使用)

  • httpMethod => POST,GET .....
  • url =>请求url
  • successHandler =>您的成功处理程序函数
  • errorHandler =>您的错误处理程序功能
  • 超时=>请求超时
 function _ajaxRequest(httpMethod, url, successHandler, errorHandler, timeout){
    return {
        httpMethod : httpMethod,
        url : url,
        successHandler : successHandler,
        errorHandler : errorHandler,
        timeout : timeout,
        request : function request(requestData) {
            var ajaxRequest = {
                type : this.httpMethod,
                url : this.url,
                contentType : "application/json; charset=utf-8;",
                data : JSON.stringify(requestData),
                cache: false,
                timeout : this.timeout,
                success : function(response) {
                    successHandler(response);
                },
                error : function(error) {
                    errorHandler(error)
                }
            };           

            $.ajax(ajaxRequest);
        }
    }
}

用法=>

var tempData = {
    "name" : "batuhan",
    "surname" : "caglayan"
};

var url1 = "url1";
var url2 = "url2";

var tempRequest = new _ajaxRequest("POST", url1, success, error, 60000);

function success(data){
     // use data
}

function error(error){
     // handle error
}

function requestProcess(){
     // *********************************************************
     // you can change url in here like => tempRequest.url = url2
     // *********************************************************
     tempRequest.request(tempData);
}