- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在对表单数据进行验证,这样当有人点击提交按钮时,它会首先检查表单的内容。许多字段(可以是零,也可以是多个,具体取决于页面)具有诸如唯一代码之类的内容,需要首先与服务器进行检查。我正在向服务器运行异步请求,该请求只是对每个字段响应“ok
”或“taken
”。如果任何字段有错误,则页面不会提交。
一方面,这应该是异步的:当该请求停止处理时,它应该继续验证其余的表单字段,包括触发其他请求。如果调用是同步进行的,那么它会明显减慢后面字段的反馈速度。
另一方面,我想在对 validate()
方法做出"is"或“否”响应之前确保所有验证请求均已返回(或超时),并且允许继续提交或不。因此,如果有两个字段需要验证,则 validate()
方法应触发这两个 AJAX 请求,处理其余字段,然后等到这两个请求返回后再最终返回。
我可能可以通过一些丑陋的自制解决方案来实现这一点(可能涉及一组代表正在进行的请求或其他内容的随机ID),但在我这样做之前,我应该使用任何内置函数、插件或标准技术相反?
<小时/>澄清
我认为我需要的是让代码等待一个或多个异步请求的结果,然后再继续执行一种方法。这与回调不同,因为该方法的结果取决于请求的结果。它与同步请求不同,因为可能有多个同步请求。
我在提交之前用它来检查表单:
$("form").submit(function () {
return validate($(this));
});
如果 validate()
方法返回 false,则表单不会提交。 validate()
突出显示任何不接受的字段。对于普通字段,validate()
看起来像这样(大大简化的版本,没有反馈):
function validate(form) {
resetWarnings(form);
var ok = true;
// required fields
form.find("input.required").each(function () {
var field = $(this);
if (field.val() === "") {
ok = false;
}
return this; // meaningless in this case but a good habit to keep
});
// fields that matches a pattern
form.find("input.pattern").each(function () {
var field = $(this);
var pattern = field.data("pattern");
if (!field.val().match(pattern)) {
ok = false;
}
return this;
});
// various other rules for other sorts of field
...
return ok;
}
对于 AJAX 字段,它更像是这样:
form.find("input.lookup").each(function () {
var field = $(this);
var url = field.data("lookup");
$.ajax({
url: url,
data: { code: field.val() },
success: function (result) {
if (result === "taken") {
ok = false;
}
}
}
});
但是当然,validate()
在调用 success 方法之前就已经完成了。因此,如果我可以让它等到 ajax 完成(成功或错误)后再返回,我就可以获得正确的结果并停止提交表单。如果我使 ajax 同步,那么整个方法将停止直到完成,这是错误的。
进一步思考
考虑到 Javascript 的线程模型(也就是说根本没有),我所要求的在技术上是不可能的吗?
最佳答案
对于 jQuery 1.5+,从多个异步请求收集结果数据的最佳方法是使用 Deferred 对象来表示这些请求及其状态,以及包装函数 $.when(...).then( allRequestsCompleteCallback(), someRequestFailedCallback () )
这有助于避免使用多个嵌套回调函数,使您的代码更加干净且易于维护。
JavaScript/jQuery 示例:
function ajax1() { return $.ajax({ url: 'server1.php' }) }
function ajax2() { return $.ajax({ url: 'server2.php' }) }
$.when( ajax1(), ajax2() ).then(
function() {
// ajax1 AND ajax2 succeeded
},
function() {
// ajax1 OR ajax2 succeeded
}
);
在此处查看更多文档和示例:
关于jQuery AJAX : collecting multiple asynchronous results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675318/
来自 Akka 文档,Pipelining and Parallelism Akka Streams processing stages (be it simple operators on Flow
我正在开发一个提取元数据的 chrome 扩展程序。解析元数据的代码包含在内容脚本中。 background.js 和 content.js 通过 sendMessage 请求和响应进行通信。我遇到了
我正在使用 Python 3.7.4 和这段代码(MWE): import asyncio async def foo(x): await asyncio.sleep(1) retur
嘿,我对 Dart Futures 很陌生,我有以下情况。 每当用户在 UI 中键入一个字母时,addressChanged()我的 ui_component 中的方法被调用。该方法调用方法getPr
我在尝试将异步函数转换为同步函数时遇到问题。 这是类中的一个方法: doPost: function(call, data) { var uri = 'http://localhost/api
在很多关于 C# 的 async/await 的讨论中,我看到人们提到了“自然异步”或“纯异步”的术语。这些术语到底是什么意思? “自然异步”操作的一些示例是什么?为什么这样调用它? “非自然异步”操
现在我正在使用 Gevent,我想问两个问题: 有没有办法执行特定的任务,这将 从不异步执行 (而不是在每个任务中使用锁) 有没有办法到优先在 Gevent 中生成任务?就像一组将以低优先级生成的任务
在 document , 如果方法也用@gen.coroutine 修饰,则不需要@web.asynchronous。像这样 @web.asynchronous @gen.coroutine def
已在 Google Analytics(分析)帮助论坛中发布此内容,但无人能提供帮助。希望我在这里有更多的运气......: 我对我的网页使用 Google Anlaytics 异步跟踪。像个魔法一样
我正在尝试从 Controller 异步发送电子邮件并收到以下错误: 我不想等待电子邮件发送完成操作。 An asynchronous module or handler completed whil
在使用 SendMailAsync 时出现以下错误: An asynchronous module or handler completed while an asynchronous operati
我有一个非常简单的 ASP.NET MVC 4 Controller : public class HomeController : Controller { private const st
我正在编写一个使用 ASP.NET Web API 代理一些 HTTP 请求的应用程序,我正在努力识别间歇性错误的来源。这似乎是一个竞争条件...但我不完全确定。 在详细介绍之前,先介绍应用程序的一般
Cancel CancellationTokenSource 的成员对象“传达取消请求”,我认为这意味着它是触发并忘记并且不会等到取消完成(例如,所有异常处理程序都已运行)。这很好,但我需要等到一个未
在 D 中异步调用其他进程的首选方法是什么?我的用例正在调用 svn status检查退出状态,并解析其标准输出和错误。 最佳答案 我想 std.stdio.popen是你想要的: void pope
我一直听说使用异步编程模式会使我的代码运行得更快。为什么这是真的?无论是现在运行还是稍后运行,都不是必须以任何一种方式运行完全相同的代码吗? 最佳答案 它不是更快,它只是不浪费时间。 同步代码在等待
我有点困惑为什么同步调用与异步调用不同,因为从来没有“立即”响应,它仍然需要几纳秒或几毫秒? 最佳答案 同步调用在完成其工作(或达到超时)后返回其调用者。异步调用在启动其他事件后立即返回。 这意味着,
我正在尝试使用 MSDN 上描述的 OVERLAPPED 结构异步调用 DeviceIO 函数。 我正在使用 FSCTL_ENUM_USN_DATA 控制代码来枚举 NTFS 驱动器的 MFT,但我无
我一直在尝试创建一个服务器进程,以异步方式从客户端进程接收输入文件路径和输出路径。服务器进行了一些与数据库有关的转换,但是为了简单起见,我们假设它只是将所有内容都转换为大写。这是服务器的一个玩具示例:
我正在编写一个异步方法,它应该异步查询一个端口,直到找到一个,或者在 5 分钟后超时; member this.GetPort(): Async = this._GetPort(DateTim
我是一名优秀的程序员,十分优秀!