Javascript RequireJS使用xhr加载脚本,而不是<;脚本>;标签

Javascript RequireJS使用xhr加载脚本,而不是<;脚本>;标签,javascript,angularjs,ajax,requirejs,lazy-loading,Javascript,Angularjs,Ajax,Requirejs,Lazy Loading,我正在尝试使用requirejs 这是我在解析中的代码,它按预期工作 require(['controllers/' + controllerName], function (data) { $stateParams.controllerName = data.name || controllerName; deferred.resolve(); }); 但此方法是使用请求的url将标记添加到头部 我想使用XHR加载它,这样它就不会添加任何脚本标记或显示在参考资料中 我试过这样

我正在尝试使用
requirejs

这是我在解析中的代码,它按预期工作

require(['controllers/' + controllerName], function (data) {
    $stateParams.controllerName = data.name || controllerName;
    deferred.resolve();
});
但此方法是使用请求的url将
标记添加到
头部

我想使用
XHR
加载它,这样它就不会添加任何脚本标记或显示在参考资料中

我试过这样做

require(['text!controllers/' + controllerName + '.js'], function (data) {
    var funcData = new Function(data)();  //expecting data as string
    $stateParams.controllerName = funcData.name || controllerName;
    deferred.resolve();
});
但是我收到了错误,因为requirejs试图加载
/text.js
,而不是
/controllers/nameOfController.js

有没有办法解决这个问题或其他更好的方法? (我只想用
XHR
加载脚本)

您的项目中有依赖项吗


将查找
text.js
,如果它不存在,将出错。

确定。。最后,这是我在不破坏
requirejs
实际功能的情况下得出的结论。现在它使用
xhr
加载脚本

将其添加到
main.js
中以覆盖原始方法

注意:仅在PROD中使用此选项,否则将丢失浏览器中的脚本调试

require.load = function (context, moduleName, url) {
    var config = (context && context.config) || {},
        isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document),
        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',   
        makeError = function (id, msg, err, requireModules) {
            var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
            e.requireType = id;
            e.requireModules = requireModules;
            if (err) e.originalError = err;
            return e;
        },
        xmlhttp;
    if (isBrowser) {
        if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
        else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == XMLHttpRequest.DONE) {
                if (xmlhttp.status == 200) {
                    try {
                        new Function(xmlhttp.responseText)();
                        context.completeLoad(moduleName);
                    } catch (e) {
                        context.onError(makeError('scripterror', 'executing script failed for ' + moduleName + ' at ' + url, e, [moduleName]));
                    }
                }
                else context.onError(makeError('notloaded', 'loading scripts failed for ' + moduleName + ' at ' + url, xmlhttp.status, [moduleName]));
            }
        }
        xmlhttp.open("GET", url, true);
        xmlhttp.send();
    } else if (isWebWorker) {
        try {
            importScripts(url);
            context.completeLoad(moduleName);
        } catch (e) {
            context.onError(makeError('importscripts', 'importScripts failed for ' + moduleName + ' at ' + url, e, [moduleName]));
        }
    }
}; 

我愿意。。但是后来我发现它是在
basPath
而不是
bowercomponents
中查找的,所以我将实际路径添加到
config.paths
并开始工作。。但是每次我使用依赖项而不是将其保存到模块中时,它都会生成
xhr