我的JavaScript代码的问题在哪里
Where is the issue with my javascript code?
好的,所以我正在尝试使用javascript HTTPRequest来加载一个名为"chem_vocab.xml"的XML文档。但是,每当我尝试执行该功能时,都不会发生任何事情。我放置了几行 alert(),这样我可以看到我的故障发生在哪里。似乎在以下两者之间存在一些问题:
alert("Beginning Loading");
和
alert("XML Loaded");
页面将正确提醒"正在开始加载...",但不会提醒"XML 已加载"。我的问题在哪里?
function load_vocab(){
alert("Beginning Loading...");
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","chem_vocab.xml",true);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
alert("XML loaded");
var x=xmlDoc.getElementsByTagName("wordlist")[0];
x= x.getElementsByTagName("word")[0];
word = x.getElementsByTagName("spelling")[0].childNodes[0].nodeValue;
definition = x.getElementsByTagName("definition")[0].childNodes[0].nodeValue;
alert("XML parsing successful");
document.getElementById('spelling').innerHTML = word;
document.getElementById('definition').innerHTML = definition;
}
您的代码:
xmlhttp.open("GET","chem_vocab.xml",true);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
您的 Ajax 请求是异步的。因此,您不能在发送后立即读取 .responseXML
属性。(xmlDoc
的值将为空/未定义。您必须从readystatechange
回调中执行此操作。
由于您似乎缺乏使用 Ajax 的经验,请考虑使用第三方 Ajax 库(例如 jQuery,如果您不使用通用库,则使用 miniajax)。
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
xmlDoc=xmlhttp.responseXML;
alert("XML loaded");
var x=xmlDoc.getElementsByTagName("wordlist")[0];
x= x.getElementsByTagName("word")[0];
word = x.getElementsByTagName("spelling")[0].childNodes[0].nodeValue;
definition = x.getElementsByTagName("definition")[0].childNodes[0].nodeValue;
alert("XML parsing successful");
document.getElementById('spelling').innerHTML = word;
document.getElementById('definition').innerHTML = definition;
}
}
您的代码是异步的。您必须先等待响应,然后才能执行xmlDoc=xmlhttp.responseXML;
。因此,您需要为 onreadystatechange
事件添加一个事件处理程序,以便您获得响应。这就是上面的代码所做的
异步调用并期望它同步返回。使用此代码使调用不受阻塞,因此永远不会加载响应。
xmlhttp.open("GET","chem_vocab.xml",true); // True means non-blocking, you need a listener
因此,这将始终为空。
xmlDoc=xmlhttp.responseXML;
根据此文档快速而肮脏的修复。
xmlhttp.open('GET', 'chem_vocab.xml', false);
xmlhttp.send(); // because of "false" above, will block until the request is done
// and status is available. Not recommended, however it works for simple cases.
if (xmlhttp.status === 200) {
console.log(request.responseText);
xmlDoc=xmlhttp.responseXML;
}
相关文章:
- 在哪里使用名为“;冻结”;
- Ember.js-接口状态应该存储在哪里
- 在Redux中,我应该在哪里编写复杂的异步流
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 在哪里可以找到RXUI Javascript'时间飞逝'实例
- Redux应用程序结构-在哪里放置服务/业务逻辑
- 在哪里可以找到'项目'在plothover函数中
- Javascript-在哪里放置常量,全局或本地
- Sequelize:这些方法应该驻留在哪里
- AJAX更新面板不;t工作.请帮我找出我错在哪里.
- 在哪里存储HTML模板以在Backbone.js中使用
- ForerunnerDB将其数据库保存在哪里
- 在哪里可以找到R-to-JavaScript编译器
- 很棒的共享按钮application.coffee文件在哪里
- WinJs中的视图状态更改事件在哪里
- 如果在对象上触发了dispatchEvent,我如何才能找到如何侦听它以及在哪里调度事件
- 我的JavaScript代码的问题在哪里
- 零剪贴板的问题不确定在哪里查找
- JavaScript-动态变量获胜't更新-What'问题出在哪里
- jQuery Masonry.js格式不正确;问题出在哪里