Избегайте повторных результатов при входном вызове ajax;убить предыдущий вызов ajax - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть простое поле для предложений, или вроде того, но оно получает результаты дважды, в зависимости от скорости набора текста пользователем.Я думаю, это потому, что предыдущий вызов ajax еще не закончился.

Я думаю, что нашел ответ на свой вопрос здесь , но я действительно не знаю, как реализовать abort() функция отмены предыдущего вызова в моем коде.

class @Customer

  @find: (search_box) ->

    search = search_box.val()
    linked = if search_box.data('linked_list') then true else false
    list = $('#customers_search_list')
    list.empty()

    if search.length > 2

      $.ajax

        url: '/customers/find.json?search='+search

        beforeSend: ->
          search_box.addClass 'on_request'

        error: (error) ->
          Ui.live_notice i18n.user.error + ": \r\n "+error.errorThrown, 'error'

        success: (customers) ->
          for customer in customers
            list.append Customer.build_list_item customer, linked

        complete: ->
          search_box.removeClass 'on_request'

  @build_list_item: (customer, linked) ->

    [open_tag,close_tag] = ''
    [open_tag,close_tag] = ["<a href='/customers/#{customer.id}'>", "</a>"] if linked

    """
    <li>
      #{open_tag}
        <div class='names'>
          <div class='name'>#{customer.name}</div>
          <div class='fiscal_name'>#{customer.fiscal_name}</div>
        </div>
        <div class='code'>#{customer.code}</div>
      #{close_tag}
    </li>
    """

$(document).on "keyup", "input#customer_name_search", (el) =>
  Customer.find $(el.currentTarget)

1 Ответ

0 голосов
/ 19 сентября 2018

Столкнувшись с такими проблемами, я обычно предпочитаю задушить запрос, подождав 50-100 миллисекунд после нажатия клавиши, чтобы увидеть, следует ли новое нажатие, и только затем сделать запрос.Это также может сэкономить нагрузку на ваш сервер.Попробуйте прибегнуть к помощи «javascript запроса регулирования», если вы хотите увидеть различные подходы к реализации этого.

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