2015-09-04 40 views
0

我有一组函数用于处理发送和接收POST和GET数据的ajax。但我得到在Chrome这样的警告:ajax函数的主线程警告

Synchronous XMLHttpRequest on the main thread is deprecated

我不清楚关于如何解决此警告,因为我不想忽略它用在道路上的问题而告终。

这是我的AJAX功能代码:

var ajax = new function(){ 

    var self = this; 

    self.x = function() { 
     if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari 
      return new XMLHttpRequest(); 
     }else{// code for IE6, IE5 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    }; 

    self.send = function(url, callback, method, data, sync) { 
     var x = self.x(); 
     x.open(method, url, sync); 
     x.onreadystatechange = function() { 
      if (x.readyState == 4) { 
       callback(x.responseText) 
      } 
     }; 
     if (method == 'POST') { 
      x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
     } 
     x.send(data) 
    }; 

    self.get = function(url, data, callback, sync) { 
     var query = []; 
     for (var key in data) { 
      query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key])); 
     } 
     self.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, sync) 
    }; 


    self.post = function(url, data, callback, sync) { 
     var query = []; 
     for (var key in data) { 
      query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key])); 
     } 
     self.send(url, callback, 'POST', query.join('&'), sync) 
    }; 
}; 

特别是该警告的原因,以及如何,我会去修正它在公认的标准是什么?

回答

0

当您拨打send方法时,请确保最后一个参数(sync)设置为false。如果设置为true,它将异步执行AJAX调用,因此不会警告您。

同步调用确实被弃用,因为它在等待响应时完全阻塞主线程。这在大多数情况下会完全阻止浏览器的用户界面直到通话结束。

+0

问题是,我使用AJAX加载HTML页面。所以我确实需要它在加载页面时在技术上阻塞'',因为网站在加载页面之前应该什么都不做。但是,如果它不赞成处理这种事情的新标准方法? – Sir

+0

只需显示一个白页,或者更好,一个小微调,让用户知道HTML正在加载。通过这种方式,浏览器不会被阻止,并且用户的结果也不会改变。当您在AJAX调用的结果中收到HTML时,将显示它并删除微调器(如果有的话)。 –