2012-10-26 62 views
0

我做了一个非常简单的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标签,没有我打的按钮, 有什么想法?

回答

5
button_element.addEventListener('click', fireup(xml_request)); 

在这一行,你电话fireup(xml_request),并指定任何返回(无)作为click事件的监听器。你可能想是这样的:

button_element.addEventListener('click', fireup); 
function fireup() { ... 

由于xml_request在范围为fireup功能,你不需要把它作为一个参数传递。

+0

感谢的人,它的工作原理,但我想知道为什么经过'xml_request'到fireup将立即引起含量的变化 – mko

+3

@ yozloy,因为你正在调用这个函数。有fireup'和'fireup()'之间有很大的区别' –

+0

@JanDvorak WOW,感谢完全清楚了我的困惑,如果我需要的参数传递给它,我应该使用'函数(){火起来(参数1)} ',我说得对吗? – mko

1

当您添加监听器这是因为你怎么称呼它:fireup(xml_request)。 它应该是这样的:button_element.addEventListener('click', fireup); function fireup() {...

你也可以使用匿名函数button_element.addEventListener('click', function() {...})

+0

这将导致'fireup'调用'undefined.send()' – lanzz

+0

我没有故意的......我只是想指出正确的语法 –

相关问题