Как я могу предотвратить повторную отправку моего вызова Ajax на сервер при использовании Prototype? - PullRequest
0 голосов
/ 07 апреля 2009

Я пытаюсь удержать мой Ajax вызов от повторной отправки на сервер при использовании Prototype .

Код:

echo " <a href='my.php?action=show&amp;id=".$fid."'
onclick=\"return  display('".$fid."');\"> ";  
echo "" .$fname."</a> ";

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 07 апреля 2009

Ваша display() функция должна return false;, чтобы предотвратить действие ссылки по умолчанию.

0 голосов
/ 07 апреля 2009

Это довольно легко сделать (хотя я бы посоветовал вам сделать это незаметно с помощью шаблона Event.observe(), описанного в http://prototypejs.org/api/event).

Вот решение, которое не следует поощрению, которое я только что дал (ради того, чтобы не переходить на большую часть вашего кода и позволить вам легко увидеть, что он делает.).

echo " <a href='my.php?action=show&amp;id=".$fid."'
        onclick=\"Ajax.Request(this.href); return false;\"> ";
echo "" .$fname."</a> ";

Что может быть лучше, так это добавить класс к этой ссылке, что-то вроде 'xhr', а затем ненавязчиво найти все ссылки с классом xhr и наблюдать за щелчком, а затем запустить запрос XMLHttpRequest . Вот как я это сделаю.

Итак, в вашем теле измените элемент ссылки на:

echo '<a href="my.php?action=show&amp;id=' . $fid .'" class="xhr">' . $fname . '</a> ';

Теперь где-нибудь в вашей области скриптов сделайте:

<script type="text/javascript" charset="utf-8">
    ....
    // Wait for the DOM to be loaded (http://prototypejs.org/api/document/observe)
    document.observe('dom:loaded',function(){
       // Use Prototype's $$ utility method to find all the link's
       // with class xhr (http://prototypejs.org/api/utility/dollar-dollar)
       $$('a.xhr').each(function(link_element){
           // Iterate through each of these links and attach the following observer.
           link_element.observe('click', function(click_event){
               Ajax.Request(link_element.href);
               // stop() will cancel the click-event from "doing" anything else
               // http://prototypejs.org/api/event/stop
               click_event.stop();
           });
       });
    });
</script>

Что происходит сейчас, это после загрузки DOM (но до отображения страницы) ваш наблюдатель кликов будет прикреплен ко всем элементам ссылки с классом 'xhr'. Он захватывает событие click, запускает запрос XMLHttpRequest и не позволяет событию предварительно выполнить действие по умолчанию (в данном случае по ссылке на другую страницу), вызывая метод stop () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...