Javascript &引用;XMLHttpRequest异常101“;关于嵌套AJAX查询
我正在用javascript对正在解析的二进制文件进行AJAX获取。(如果有人关心的话,请参阅Quake 2 BSP。)获取和解析初始文件的代码工作正常,大致如下所示:Javascript &引用;XMLHttpRequest异常101“;关于嵌套AJAX查询,javascript,ajax,Javascript,Ajax,我正在用javascript对正在解析的二进制文件进行AJAX获取。(如果有人关心的话,请参阅Quake 2 BSP。)获取和解析初始文件的代码工作正常,大致如下所示: function loadFile(url) { var request = new XMLHttpRequest(); request.onreadystatechange = function () { if (request.readyState == 4 && reque
function loadFile(url) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var parsed = parseFile(request.responseText);
}
};
request.open('GET', url, true);
request.overrideMimeType('text/plain; charset=x-user-defined');
request.setRequestHeader('Content-Type', 'text/plain');
request.send(null);
}
正如我所说的,这很好,所有内容都正确加载和解析。但是,该文件还描述了几个需要检索的次文件(纹理),因此我添加了一个内部循环,可以加载和解析所有这些文件,如下所示:
function loadFile(url) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var parsed = parseFile(request.responseText);
for(var i = 0; i < parsed.files.length; ++i) {
loadSecondaryFile(parsed.files[i].url); // Request code here is identical to this function
}
}
};
request.open('GET', url, true);
request.overrideMimeType('text/plain; charset=x-user-defined');
request.setRequestHeader('Content-Type', 'text/plain');
request.send(null);
}
function loadSecondaryFile(url) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var parsed = parseSecondaryFile(request.responseText);
}
};
request.open('GET', url, true);
request.overrideMimeType('text/plain; charset=x-user-defined');
request.setRequestHeader('Content-Type', 'text/plain');
request.send(null);
}
函数加载文件(url){
var request=new XMLHttpRequest();
request.onreadystatechange=函数(){
if(request.readyState==4&&request.status==200){
var parsed=parseFile(request.responseText);
对于(var i=0;i
但是,从该循环中发出的每个请求都会立即失败,并显示以下消息(在Chrome中,开发频道):NETWORK\u ERR:XMLHttpRequest Exception 101这让我觉得很奇怪,因为如果我在loadFile
之外调用loadSecondaryFile
,它会工作得很好
我最初的印象是,在另一个的onreadystatechage
中启动一个ajax调用可能是不好的jujuju,但是在setTimer
中包装辅助ajax调用没有任何区别
有什么想法吗?还有。。。成功!所以我觉得自己真的很愚蠢,现在我意识到,其他人不可能用我提供的信息给我一个解决方案。非常抱歉 它与AJAX无关,而与我如何获取URL有关。回想一下,我提到我正在从地震2 bsp加载二进制数据,在本例中是纹理路径。bsp格式的纹理存储为固定长度的32位字符串,填充为空。我正在使用substr阅读它们,如下所示:
var path=fileBuffer.substr(fileOffset,32)代码>
我以为这会给我一个像“e2u3/clip”这样的字符串,但实际上是给我“e2u3/clip\0\0\0\0…”当然,当打印出来时,这看起来是正确的(因为console.log将空字符表示为nothing)。但是浏览器立即将其识别为错误的URL并将其抛出
将我的读取代码更改为:
var path=fileBuffer.substr(fileOffset,32)。替换(/\0+$/,“”)代码>
给了我有效的字符串并修复了所有明显的AJAX问题!叹息
谢谢你的建议!它帮助我走上了正确的道路。你能展示一下loadSecondaryFile
函数吗?正如我在问题中提到的,请求部分与loadFile相同,但我还是会发布它以避免混淆。对于(var I=0;Iparsed.files[i]。url
是否是有效的请求url?