2015-09-04 45 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時,將顯示它並刪除微調器(如果有的話)。 –