我制作了一个非常简单的Ajax测试代码片段:
<!DOCTYPE html>
<html>
<head>
<script src='main.js'></script>
</head>
<body>
<button id='get-content'>Click</button>
<p></p>
</body>
</html>
main.js
(function(){
window.addEventListener('load', function(){
var xml_request = new XMLHttpRequest();
xml_request.open('GET', '/test.txt', true);
xml_request.addEventListener('readystatechange', change_content);
var button_element = document.getElementById('get-content');
button_element.addEventListener('click', fireup(xml_request));
function fireup(xml_request) {
xml_request.send();
}
function change_content(){
if (xml_request.readyState == 4 && xml_request.status == 200) {
document.getElementsByTagName('p')[0].textContent = xml_request.responseText;
};
};
});
})();
它有效,但除了,ajax请求发送和更改p标签,没有我按下按钮, 任何想法?
答案 0 :(得分:5)
button_element.addEventListener('click', fireup(xml_request));
在此行中,您调用 fireup(xml_request)
,并将其返回的任何内容(无任何内容)指定为click
事件的侦听器。你可能想要这样的东西:
button_element.addEventListener('click', fireup);
function fireup() { ...
由于xml_request
位于fireup
函数的范围内,因此您无需将其作为参数传递。
答案 1 :(得分:1)
这是因为你在添加监听器时调用它:fireup(xml_request)
。
它应该像:button_element.addEventListener('click', fireup); function fireup () {...
你也可以使用匿名函数button_element.addEventListener('click', function () {...})