mootools内联Ajax调用不起作用

时间:2011-11-20 14:22:54

标签: ajax onclick mootools

我正在尝试使用mootools ajax请求来记录外发链接的点击次数。到目前为止,我正在做的事情。

每个链接如下所示:

<div id="1">    
<a href="http://stackoverflow.com/" onclick="clickRecord(1)">StackOverflow</a>
</div>

javascript函数clickRecord(id)定义如下:

function clickRecord(id){
    var u = "record.php";   
    var req = new Request({
      method: 'post',
      url: u,
      data:{'id':id},
      onComplete:function(response){
      }
    }).send();

}

我遇到的问题是这个。如果我添加一个返回false;到onclick =“”声明,一切正常,当然问题是点击不会将用户带到目标页面。如果我没有返回假;那么似乎ajax调用永远不会被执行。

我认为onclick事件应首先执行,然后才应执行默认操作。情况不是这样吗?

如果您使用onmousedown事件,则会出现更奇怪的情况。好像在Firefox上,如果你使用onmousedown事件,一旦你转到新页面,你只能导航回旧页面,你必须刷新旧页面。否则呼叫不会被执行。这不会发生在IE上。

2 个答案:

答案 0 :(得分:2)

不要使用onclick - 非常1995年。

而是将事件附加到元素并使用event.stop(),即:

<a href="http://stackoverflow.com/" data-id="1">StackOverflow</a>

JS:

document.getElements('a').addEvents({
    click: function(event) {
        event.stop();
        var u = 'record.php';
        var req = new Request({
            method: 'post',
            url: u,
            data: {
                'id': this.get('data-id');
            },
            onComplete: function(response) {}
        }).send();
    }
});

顺便说一下。 <div id="1">这在HTML中无效,ID需要以字母开头。

答案 1 :(得分:0)

行。找到其中一个问题的答案:

  1. 通过onclick()声明时,内联mootools请求未执行。 这似乎是由脚本不同步引起的。所以它可能在没有实际完全提交请求的情况下返回,然后浏览器移动到另一个页面来中断执行。向脚本添加同步调用可以解决问题:
  2. function clickRecord(id){
        var u = "record.php";   
        var req = new Request({
          async:false,
          method: 'post',
          url: u,
          data:{'id':id},
          onComplete:function(response){
          }
        }).send();
    }
    

    onmousedownevent上提到的第二个问题,即如果浏览器导航回来,firefox没有执行ajax调用仍未解决。但是我要离开那是因为这不是提出的主要问题。