排队表单提交请求,直到服务器返回
Queuing form submission requests until server has returned
我有一个基于主干的视图,用户可以在其中键入文本字段中的单词并提交表单。有两个事件与视图相关联 - submit
和 keyup
。
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
好吧,我不知道应该,但我使用的基本方法是:
- 初始化视图时,设置 this.outstanding_callbacks = 0;
- 在进行 $.getJSON 调用之前,递增该变量 (this.outstanding_callbacks++)
- 在@buildConceptAttrs递减该变量(this.outstanding_callbacks--)
- 当您提交时,请检查outstanding_callbacks;如果> 0,请不要提交。 相反,做一个window.setTimeout(5000,retryFunction),其中5000是你想要等待的毫秒数,而retryFunction基本上是相同的函数(它可能实际上是相同的函数)
现在,您可能需要执行一些绑定或其他操作,以便可以访问步骤 #3 和 #4 中的视图,但希望这能为您提供一个粗略的想法。
我捕获了jQuery.ajaxStart和jQuery.ajaxStop事件。
我显示一条加载消息:
$(function(){
$('#loading').ajaxStart( function() {
$(this).animate({ top: "0" }, 200);
});
$('#loading').ajaxStop( function() {
$(this).animate({ top: "-70" }, 100);
});
});
但是考虑到这个想法,您可以使用相同的技术来禁用form.submit()
,或者至少等待.ajasStop()
执行提交。
它并不是真正等待所有正在进行的事件......只是为了AJAX事件......但也许它足以解决你的问题。
相关文章:
- 从服务器返回exe文件,并通过浏览器在客户端下载
- ASP:代码隐藏的字段变量在从更新面板中的服务器返回时丢失值
- web2py服务器返回错误,但已提交查询
- 如何访问服务器返回的Json类型
- 试图执行JSON.parse,但它不喜欢我使用服务器返回的字符串所做的操作
- Python Flask Web服务器未接收到JSON ajax POST请求,服务器返回HTTP 200 OPTION
- ASP.NET页面:当服务器返回要下载的文件时,如何调用javascript方法
- angularjs-SyntaxError:请求从服务器返回时出现意外令牌
- 当服务器返回500错误时,JQuery ajax在$.中停止
- 从服务器返回的日期获取星期几
- 跨 ajax 请求到服务器返回的 json 对象显示错误意外令牌:
- React 组件中的字符串插值,其中包含从服务器返回的字符串
- Ajax/Jquery - 在从服务器返回数据时调用 javascript 函数/使用 ajax 执行并行 SQL 查询
- Meteor.call从服务器返回未定义到客户端
- AJAX 响应不保留从服务器返回的 LinkedHashMap 的顺序
- 排队表单提交请求,直到服务器返回
- Firefox 不允许 CORS 请求,即使服务器返回了相应的响应标头
- 从phantomjs Web服务器返回二进制结果
- 是否可以使用服务器返回的总记录和用户在Jquery DataTable中选择的记录数来设置页码
- 用JavaScript从Rest服务器返回JSON