我正在尝试使用MooTools来完成这个任务。
描述:
我有三个按钮。myDiv外有两个按钮,myDiv内部有一个按钮。
单击这些按钮就会启动AJAX请求(将button变量传递给"button.php"),并根据响应文本更新myDiv内容。
因此,更新后,myDiv将显示Button3链接+显示已单击哪个按钮的消息。
问题:
一切看起来都很好,但是在几次点击之后,myDiv显示了loader.gif图像并停止了。在此之后,如果我稍等片刻,浏览器有时会停止工作(被阻塞)。
我注意到了IE6的这个问题。
有人能说出这个问题意味着什么吗?如果可以避免?
index.html
<html>
<head>
<script type="text/javascript" src="mootools/mootools-1.2.4-core-nc.js"></script>
<script type="text/javascript" src="mootools/mootools-1.2.4.4-more.js"></script>
<script type="text/javascript">
window.addEvent('domready', function() {
$("myPage").addEvent("click:relay(a)", function(e) {
e.stop();
var myRequest = new Request({
method: 'post',
url: 'button.php',
data: {
button : this.get('id'), test : 'test'
},
onRequest: function() {
$('myDiv').innerHTML = '<img src="images/loader.gif" />';
},
onComplete: function(response) {
$('myDiv').innerHTML = response;
}
});
myRequest.send();
});
});
</script>
</head>
<body>
<div id="myPage">
<a href="#" id="button1">Button1</a>
<a href="#" id="button2">Button2</a>
<div id="myDiv">
<a href="#" id="button3">Button3</a>
</div>
</div>
</body>
</html>button.php
<a href="#" id="button3">Button3</a>
<br><br>
<?php echo 'You clicked ['.$_REQUEST['button'].']'; ?>发布于 2010-06-09 19:06:15
嗯,代码本身没有什么问题。下面是你可以尝试做的事情:
onSuccess代替onComplete和console.log进行响应--检查是否有可疑的事情发生。也许您在某个时候得到了错误的响应,从而导致了IE上的JS错误(不尝试在内联元素中注入块元素,或者一些非语义的oddities?)el.set('html', response)而不是el.innerHTML)。
发布于 2010-06-10 10:15:08
http://www.jsfiddle.net/dimitar/VZuGz/
工作得很好--注意,我添加了一个布尔值来存储单击状态--它一次只允许处理1个ajax请求,以防出现问题(请求排队)。
在某种程度上,这现在是同步的w/o是同步的。如果您必须记录每一次单击,无论速度有多快,您都可以使用http://mootools.net/docs/more/Request/Request.Queue,但禁用正在中继的元素的输出(可点击)。
附注:最近,我为mootools中的热图日志编写了一个类--它所做的类似于您所做的事情,请告诉我,如果您正在朝着这个方向前进,我将很乐意与您共享代码。
(function() {
var clicked = false;
$("myPage").addEvent("click:relay(a)", function(e) {
e.stop();
if (clicked)
return; // do 1 ajax at a time.
new Request.HTML({
method: 'POST',
url: '/ajax_html_echo/',
data: {
button : this.get('id'), test : 'test',
html: '<a href="#" id="button3">Button3</a><br><br>You clicked id ' + this.get("id")
},
onRequest: function() {
$('myDiv').set("html", 'loading...');
clicked = true;
},
onComplete: function() {
$('myDiv').set("html", this.response.text);
clicked = false;
}
}).send();
});
})();https://stackoverflow.com/questions/3005426
复制相似问题