Отменить переход по ссылке

249
31 марта 2018, 18:19

Всем привет, есть вообщем ссылка:

<a href="http://google.ru" onclick="return myFunc('123', 'abx')">Click</a>

Есть функция в javascript:

var myFunc = function() { 
   $.ajax({
                            type: "POST",
                            url: "",
                            data: {
                                id: id,
                                updated_at: updated_at
                            },
                            success: function (result) {
                                if(result == 'ok') {
                                    return true;
                                } else {
                                    alert('error');
                                    return false;
                                }
                            }
                    });
}

Мне нужно отменить нажатие ссылки, если ajax вернул alert('error').
return false не помогает. Что можно в этом случае сделать?

Answer 1

Так как решение принимается асинхронно, то придётся блокировать первый запрос и в случае успеха Ajax-запроса генерировать второй или переходить по URL-у с помощью JS.

Пример реализации с генерацией второго события и использованием флага:

var $link = $("a"); 
var clickIsConfirmed = false; 
var result = 0; //для примера 
 
$link.on("click", function() { 
  if (!clickIsConfirmed) { 
    $.ajax({ 
      url: "", 
      error: function() { //для примера 
        result++; //для примера 
        if (result == 2) { //для примера 
          clickIsConfirmed = true; 
          $link[0].click(); 
        } 
      } 
    }); 
    return false; 
  } 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<a href="">Click</a>

Пример реализации с переходом с помощью JS:

var $link = $("a"); 
var result = 0; //для примера 
 
$link.on("click", function() { 
  $.ajax({ 
    type: "POST", 
    url: "", 
    error: function() { //для примера 
      result++; //для примера 
      if (result == 2) { //для примера 
        window.location.href = $link.attr("href"); 
      } 
    } 
  }); 
  return false; 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<a href="http://google.ru">Click</a>

READ ALSO
Блокировка ориентации экрана с помощью javascript

Блокировка ориентации экрана с помощью javascript

Имеется ли возможность средствами javascript запретить смену ориентации экрана? CSS в моём случае не подходитПробовал Screen Orientation API, но в chrome не сработало,...

258
JS Object &amp;&amp; Function. Кто может пояснить мой пример?

JS Object && Function. Кто может пояснить мой пример?

В консоли выполнил две команды на понимание кто кому прототип и получил дважды trueХочу понимать в чем кроется секрет и кто кому из них прототип...

262
Динамическое изменение направления owl-carousel 2

Динамическое изменение направления owl-carousel 2

Такая проблема с настройкой owl-carousel v2Изначально нужно было сделать бесконечный слайдер

232
Проблема с загрузкой файлов на сервер на Node.js

Проблема с загрузкой файлов на сервер на Node.js

Пытаюсь сделать загрузку изображений на сервер с помощью Nodejs и Ajax

252