不推荐在主线程上使用同步XMLHttpRequest

时间:2015-04-07 00:26:13

标签: javascript jquery html ajax extjs

  • 我正在研究extjs框架..
    • 我在extjs上运行了一个应用程序..
    • 每当我在浏览器中打开应用程序时...我会看到以下内容 在我的控制台中发出警告......

主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看http://xhr.spec.whatwg.org/

  • 你们可以告诉我如何删除它..
  • 当我点击ext-all-debug-w-comments.js文件所需的警告时
  • 并指向以下代码部分......

    尝试{                     xhr.open('GET',noCacheUrl,false);                     xhr.send(NULL);                 } catch(e){                     isCrossOriginRestricted = true;                 }

  • 你们能告诉我如何防止它发生......

  • 在该文件中提供我的代码

    / **          *加载脚本文件,支持异步和同步方法          * @私人的          * /         loadScriptFile:function(url,onLoad,onError,scope,synchronous){             if(isFileLoaded [url]){                 返回装载机;             }

            var config = Loader.getConfig(),
                noCacheUrl = url + (config.disableCaching ? ('?' + config.disableCachingParam + '=' + Ext.Date.now()) : ''),
                isCrossOriginRestricted = false,
                xhr, status, onScriptError,
                debugSourceURL = "";
    
            scope = scope || Loader;
    
            Loader.isLoading = true;
    
            if (!synchronous) {
                onScriptError = function() {
                };
    
                scriptElements[url] = Loader.injectScriptElement(noCacheUrl, onLoad, onScriptError, scope);
            } else {
                if (typeof XMLHttpRequest != 'undefined') {
                    xhr = new XMLHttpRequest();
                } else {
                    xhr = new ActiveXObject('Microsoft.XMLHTTP');
                }
    
                try {
                    xhr.open('GET', noCacheUrl, false);
                    xhr.send(null);
                } catch (e) {
                    isCrossOriginRestricted = true;
                }
    
                status = (xhr.status === 1223) ? 204 :
                    (xhr.status === 0 && (self.location || {}).protocol == 'file:') ? 200 : xhr.status;
    
                isCrossOriginRestricted = isCrossOriginRestricted || (status === 0);
    
                if (isCrossOriginRestricted
                ) {
                }
                else if ((status >= 200 && status < 300) || (status === 304)
                ) {
                    // Debugger friendly, file names are still shown even though they're eval'ed code
                    // Breakpoints work on both Firebug and Chrome's Web Inspector
                    if (!Ext.isIE) {
                        debugSourceURL = "\n//@ sourceURL=" + url;
                    }
    
                    Ext.globalEval(xhr.responseText + debugSourceURL);
    
                    onLoad.call(scope);
                }
                else {
                }
    
                // Prevent potential IE memory leak
                xhr = null;
            }
        },
    

1 个答案:

答案 0 :(得分:0)

此警告仅在ExtJs的开发环境中的Chrome中显示。使用sencha cmd构建应用程序后,警告不再显示。正如@Evan所指出的那样警告看起来很温和,你不应该担心它。

存在警告的事实应该不是问题,因为它永远不会在已部署的应用程序中显示。如果您还没有使用sencha cmd,那么将它集成到您​​的开发周期中绝对值得。

我知道这不是问题的直接答案。我自己,我想知道是否有可能完全摆脱这个警告。