Mootools встроенный вызов Ajax не работает - PullRequest
0 голосов
/ 20 ноября 2011

Я пытаюсь использовать запросы 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 = "" все работает нормально, конечно, проблема в том, что нажатие не приводит пользователя к нужной странице.Если у меня нет возврата false;тогда кажется, что вызов ajax никогда не выполняется.

Я думал, что сначала должно выполняться событие onclick, а затем должно выполняться только действие по умолчанию.Разве это не так?

Существует еще более странный сценарий, если вместо этого вы используете событие onmousedown.Похоже, что в Firefox, если вы используете событие onmousedown, как только вы переходите на новую страницу, вы не можете просто вернуться обратно на старую страницу, вы должны обновить старую страницу.В противном случае вызов не выполняется.Это не происходит в IE.

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Не используйте 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, идентификатор должен начинаться с буквы.

0 голосов
/ 21 ноября 2011

OK. Нашел ответ на один из вопросов:

  1. Встроенный запрос mootools не выполнялся при объявлении через onclick (). Кажется, это было вызвано тем, что скрипт не был синхронным. Так что, вероятно, он возвращается без фактической фиксации запроса, и браузер затем переходит на другую страницу, прерывая выполнение. Добавление синхронного вызова в сценарий устраняет проблему:
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, если браузер переходит обратно, все еще не решена. Однако я оставляю это так, поскольку это не был главный вопрос.

...