Где я ошибаюсь в ajax.abort()?

589
04 января 2017, 04:04

Не пойму, создал же переменные перед запуском каждого аджакса, и теперь когда кликаю, хочу прервать их, однако, они все равно работают, а в консоли ошибка:

Uncaught ReferenceError: apptype is not defined
    at HTMLDivElement.<anonymous> ((index):54)
    at HTMLDocument.dispatch (jquery-3.1.1.min.js:3)
    at HTMLDocument.q.handle (jquery-3.1.1.min.js:3)

Ajax запросы:

      jQuery(document).ready(function($) {
     var getsteamgames, apptype;
     $(document).on('click', '.suggestedGame', function(event) {
               // getsteamgames.abort();
               // apptype.abort();
               //тут должно прервать поиск возможных игр, аджакс запросы и их переменные созданы ниже
               var appID = $(this).data('appid'),
               token = $('input[name="_token"]').val(),
               appName = $(this).text(),
               imgUrl = 'http://cdn.akamai.steamstatic.com//steam//apps//'+appID+'//header.jpg?t=1456860366';
               $('#gameName').val(appName);
               $('.hidden').addClass('show');
               $('.show').removeClass('hidden');
               $('.formy').addClass('col-md-8');
               $('.formy').removeClass('col-md-12');
               $('.suggested').html('');
               var urlcheck = $.ajax({
                url: '/urlcheck',
                type: 'post',
                data: {
                  'imgUrl': imgUrl,
                  '_token': token,
                },
              })
               .done(function(data) {
                if(data === '1')
                {
                 $('#gameLogo').attr('src', 'http://cdn.akamai.steamstatic.com//steam//apps//'+appID+'//header.jpg?t=1456860366');
               }
               else
               {
                 $('#gameLogo').attr('src', 'http://voting/imgs/no_img.jpg');
               }
             })
               .fail(function() {
                console.log("error");
              });
             });
     $(document).on('submit', '#searchForm', function(event) {
      var gameName = $('#gameName').val();
      if( $('#gameLogo').attr('src') == '' && $('#gameName').val().length === 0)
      {
       confirm('Введите название игры или ее часть, ожидайте пока поисковик найдет возможные варианты, выбирите его и нажмите "Голосовать".');
       event.preventDefault();
     }
     else
     {
      confirm('Подтвердите свой выбор за:' + gameName + '?');
      location.reload();
    }
  });
   });
    function getSteamGames(event) {
      $('.suggested').html('');
      $('#gameLogo').attr('src', '');
      $('.show').addClass('hidden');
      $('.hidden').removeClass('show');
      $('.formy').addClass('col-md-12');
      $('.formy').removeClass('col-md-8');
      var token = $('input[name="_token"]').val(),
      gameName = $('#gameName').val();
      if(gameName.length >= 4)
      {
        $('.suggested').html('<div class="spinner"><img src="http://voting/gif/91.gif" alt=""></div>');
                //вот етот запрос надо прервать, продолжает советовать даже после выбора
                getsteamgames = $.ajax({
                  url: '/getsteamgames',
                  type: 'POST',
                  dataType: 'json',
                  data: {
                    'gameName': gameName,
                    '_token': token,
                  },
                })
                .done(function(data) {
                 $('.suggested').html('');
                 $.each(data, function(index, element) {
                  var  gameName = element.name,
                  appID = element.appid;
                    // и этот, смысла нет продолжать проверку, если уже выбор сделан
                    apptype =  $.ajax({
                      url: '/apptype',
                      type: 'POST',
                      dataType: 'json',
                      data: {
                        'appID': appID,
                        '_token': token,
                      },
                    })
                    .done(function(isGame) {
                      // console.log(isGame);
                      if(isGame == '1')
                      {
                        $('.suggested').prepend('<div class="suggestedGame label label-info" data-appid="'+appID+'">' + gameName + '</div>');
                      }
                    })
                    .fail(function() {
                      console.log("Some error returned.");
                    });
                  });
               })
                .fail(function() {
                  console.log("ERROR");
                });
              }
            }

HTML:

  <div class="container ">
        <div class="row">

          <div class="panel panel-default">
           <div class="panel-heading text-center">
             Panel heading without title
           </div>
           <div class="panel-body">
             <div class="col-md-12">
              <div class="col-md-4  hidden">
                <img id="gameLogo" class="img-thumbnail" src="">
              </div>
              <div class="col-md-12 formy">
               <form action="post" action="" id="searchForm">
                {{ csrf_field() }}
                <span id="selectedGame"></span>
                <div class="form-group">
                  <div class="input-group">
                    <div class="input-group-addon">
                      <span class="fa fa-gamepad"></span>
                    </div>
                    <input type="text" id="gameName" class="form-control" placeholder="Введите желаемое название игры... (Half-Life)" onkeyup="getSteamGames(event)" autocomplete="off">
                    <div class="input-group-addon">
                      <span class="fa fa-search"></span>
                    </div>
                  </div>
                  <div class="suggested"></div>
                </div>
                <button class="btn btn-default btn-block" type="submit">Голосовать!</button>
              </form>
            </div>
          </div>
        </div>
        <div class="panel-footer text-center">
          Panel footer
        </div>
      </div>
    </div>
  </div>

Больше ничего нет, это все.

Answer 1

У вас переменные getsteamgames и apptype описаны внутри анонимных функций. Они будут не видны за их пределами.

READ ALSO
вопрос для начинающих

вопрос для начинающих

У меня Visual studio 2010Я создаю консольное приложение Win32

591
Наследование с целью использования Private конструктора

Наследование с целью использования Private конструктора

Привет! Я питонист, но из приличия решил заботать с++Задание: есть класс Foo с private конструктором

628
Segmentation fault при отправке POST запроса

Segmentation fault при отправке POST запроса

Написал простенький класс для отправки post запросаПроблема в том что на строчке

588
Не работает проект на VS17

Не работает проект на VS17

Здравствуйте, скачал сегодня кандидат-версию Visual Studio 17 ProНу решил посмотреть что да как

609