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
。