我想用YUI创建一个每两秒一次的事件,刷新页面。
var companymain = {
init: function() {
companymain.form = document.getElementById('companymain');
//I need a event or something and repet this function.
YAHOO.util.Event.addListener(companymain.form, 'EVENTNEED', companymain.submit_func);},
submit_func: function(e) { //stuff refresh page}
想法? 问候。
答案 0 :(得分:1)
你似乎想要做的事情并非如此。以下显示了您需要实现的一般想法:
function repeatedRefresh(delay) {
// Ajax code goes here
setTimeout(repeatedRefresh, 2000);
}
setTimeout(repeatedRefresh, 2000);
这声明了repeatedRefresh()
函数并在2000ms后调用它。函数本身将执行Ajax调用以更新页面,然后使用setTimeout()
在2000ms之后将另一个调用排队。我建议将setTimeout()
置于Ajax完成/成功回调中,以便后续调用在前一个调用完成后2000ms发生。
我已经将实际的Ajax代码留在了上面,因为我不熟悉YUI(除了非常一般的方式),但是因为你用jQuery标记了你的问题,这是一种方式用jQuery做到这一点:
function repeatedRefresh(delay) {
$.ajax({
url : "yourURLhere",
data : "optionalDataHere",
// other ajax params here as needed,
success : function(result) {
// do something with result (display it on your page somehow),
// then queue up the next refresh
setTimeout(repeatedRefresh, 2000);
}
});
}
setTimeout(repeatedRefresh, 2000);
或者,如果您的服务器端代码返回HTML,您可以使用.load()
method自动将返回的HTML加载到特定元素(例如div)中来简化操作:
function repeatedRefresh() {
$('#elementToUpdate').load('yourURLhere', function() {
setTimeout(repeatedRefresh, 2000);
});
}
setTimeout(repeatedRefresh, 2000);
最后,尝试使用现有的companymain
结构:
var companymain = {
init: function() {
setTimeout(companymain.submit_func, 2000);
},
submit_func : function() {
// YUI or jQuery (or other) Ajax code here
setTimeout(companymain.submit_func, 2000);
}
};
companymain.init();
答案 1 :(得分:0)
当然,setTimeout没有错,但YUI 2有YAHOO.lang.later(http://developer.yahoo.com/yui/docs/YAHOO.lang.html#method_later),YUI 3有YUI.later(http ://yuilibrary.com/yui/docs/api/classes/YUI.html#method_later)两者都可以选择定期调用函数而不是一次(因此不需要在代码中定义两次硬编码延迟;))