javascript - 排队表单提交请求直到服务器返回

标签 javascript jquery backbone.js coffeescript

我有一个基于主干的 View ,用户可以在其中的文本字段中键入一个词并提交表单。有两个事件与 View 相关联 - submitkeyup

class NewConceptView extends Backbone.View
  el: '#new-concept-cont'
  template: JST['concepts/new']

  events:
    'submit form': 'handleSubmit'
    'keyup #concept_title' : 'getPossibilities'

当用户键入时,我需要访问我的服务器并请求一些关于用户键入内容的数据(称为 possibilities)(就像自动完成插件一样)。

getPossibilities: (e) ->
  currentText = @titleInput.val() 
  if currentText.length > 0
    params = { text: currentText }
    $.getJSON(url, params, @buildConceptAttrs)

然后当用户提交表单时,我需要从服务器获取最后的可能性并将它们添加到集合中。

handleSubmit: (e) ->
  e.preventDefault()
  @titleInput.val('')
  @collection.create(@conceptAttrs)

当我在文本框中快速输入然后点击提交时,我遇到的问题就出现了。基本上,在所有可能的服务器请求返回之前提交表单。

有没有一种方法可以让我对提交事件进行排队,以便它们不会在所有可能性请求返回之前发生?

最佳答案

Is there a way that I should be queuing submit events 

嗯,我不知道应该,但我会使用的基本方法是:

  1. 初始化 View 时,设置 this.outstanding_callbacks = 0;
  2. 就在您调用 $.getJSON 之前,增加该变量 (this.outstanding_callbacks++)
  3. 在@buildConceptAttrs 中递减 var (this.outstanding_callbacks--)
  4. 当你去提交的时候,检查outstanding_callbacks;如果它 > 0,请不要提交。相反,执行 window.setTimeout(5000, retryFunction),其中 5000 是您要等待的毫秒数,retryFunction 基本上是相同的函数(它可能实际上是相同的函数)

现在,您可能需要进行一些绑定(bind)或其他操作,以便您可以访问步骤 #3 和 #4 中的 View ,但希望这能给您一个大概的想法。

关于javascript - 排队表单提交请求直到服务器返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216073/

相关文章:

javascript 无法启动函数或返回结果

javascript - 今天(2011 年)我应该使用哪个 JavaScript hashchange/history 库?

javascript - backbone.js 为什么 el 未定义

javascript - 传单显示所有制造商的所有弹出窗口并保留在 map 中

javascript - 向对象原型(prototype)添加函数会导致函数出现在所有 'for X in OBJ' 循环中

javascript - 使用视差代码更改导航栏干扰的颜色

javascript - 以干净的方式扩展主干 View 和继承选项

jquery - 如何从 FancyBox 中获取下拉值?

javascript - jQuery 获取视频的 "readyState"属性

javascript - 如何在 JavaScript 中迭代对象的特定键?