关闭
当前位置:首页 - 美国在线 - 正文

舟山天气预报,技巧:充分利用异步回调-灵活滑动隔断保护隐私,老房也可以宽敞明亮

admin 2019-05-22 289°c

在 JavaScript 应用程序中完成数据源和谐

简介

异步数据源中存在的问题便是:它们不是同步的。尤其是,经过 HTT关于春天的诗句P 协议恳求传递的数据或许会远远晚于预期抵达,或过期的牛奶有什么用者恳求发作超时,或许彻底失利。任何星运里的错 TCP 层协议都具有不可靠性,可是 Ajax 应用程序或许与多个服务器有数据依靠联系,而这些服务器将影响到整个 Web 应用程序。

处理数据依靠联系并非 Aja舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂x 应用程序的特别之处舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂。各式各样的应用程序都运用信号量、行列、同享变量等在进程中与状况进行通讯;在本例中,进程 一般指的是数据获取恳求。可是,Web 应用程序中的超时和其他服务器或网络问题多于大大都其他类别的应用程序(尤其是与严格执行本地运转的应用程序比较)。此外,在数据源(乃至同一数据源中的多个恳求)中的时序改变方面,根据 Web 的应用程序也要高于大大都其他类型的应用程序,乃至要高于运用根据网络的资源(如数据库)的大都应用程序。

恳求状况和超时

咱们将遇到的大大都代码示例都是关于异步 Ajax 运用 XMLHttpRequest() 查看是否接收到 200 OK 状况码。我主张在查看的内容中增加一些其他可行的状林区大雷态,以及一个用于表明彻底超时的 “伪状况”。我在近期的一篇 developerWorks 技巧 “运用会话状况防止不用要的 Ajax 流量”(拜见 参考资料 取得文章链接)中,我供给了一个运用 304 状况码 的示例,该示例依然是个不错的主意。

恰当处理各种 HTTP yy4480首播影院状况码是个不错的主意。针对 2xx 状况码(而不是 200 OK)的操作依然有点悬而未决:比如说,假如应用程序将创立一个服务器资源,那么您或许期望查看 201 Created 状况码并查看呼应中的 URI。规范状况下,客户机有必要 通明的重定向状况码 301、302、303 和 307。因而,咱们实践上不用忧虑它们,由于它们终究将得到 200 状况(或许是超时、4xx 和 5xx 状况)。差异处理 4xx 过错和 5xx 过错或许是一个很好的办法。概括地说,4xx 状况码(尤其是常见的 404 Not Found 过错)舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂或许表明客户机所运用 URL 中存在一些问题。5xx 过错表明服务器存在问题,一般只需gtx1050等候一段时赶尸艳谭间并重试便可处理该问题。

与处理各种服务器过错我心永久相同重要的状况是,有时服务石狛犬器会无限期挂起,而底子不会回来任何呼应。挂起实质上等同于 5xx 状况码,不同之处便是咱们无法查看 XMLHttpRequest().status 状况码来辨认它们。为此,咱们能够运用一个 setTimeout() 计时器来撤销超时恳求。

将相关查看结合在一起,咱们的 Ajax 数据源恳求或许类似于清单 1:

清单 1. 数据源恳求的强健处理

function getResource(uri, data_callback, error_callback, timeout) {
var tryAgain = function () {
getResource(uri, data_callback, er舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂ror_callback, timeout);
}
var r = new XMLHttpRequest();
var timer = setTimeout(
function() {
r.abort();
r.onreadystatechange = null;
setTimeout(tryAgain, timeout);
},
timeout);
r.open("GET", uri七人魔法使, true);
r.onreadystatechange = function() {
if (r.readyState != 4) {
// Ignore non-loaded rea逆袭之爱上情敌dyStates
// ...will timeout if do not get to "舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂Loaded"
return;
}
clearTimeout(timer); // readyState==4, no more timer
if (r.status==200) { // "OK status"
data_callback(r.respo舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂nseText);
}
else if (r.status==304) {
// "Not Modified": No change to display
}
else if (r.status >= 400 && 舟山天气预报,技巧:充分运用异步回调-灵敏滑动间隔维护隐私,老房也能够宽阔亮堂r.status < 500) {
// Client error, probably bad URI
error_callback(r)
}
else if (r.status >= 500 && r.status < 600) {
// Server error, try again after delay
setTimeout(tryAga石刷把in, timeout);
}
else {
error_callback(r);
}
}
r.send(null);
retur勒阿夫勒n r;
}

当然, 咱们能够在 getResource() 中参加各种增强。比如说,在超时或服务器过错状况事情中,咱们能够在延时之后调用 tryAgain()干洗店。或许,咱们或许期望在这两种状况下运用一些其他的回调。传递的 error_callback() 函数将用于下面这种状况,即不期望再次发送重复恳求,可是常常会发作这种状况。

数据和谐

给出的 getResource() 函数或许会无限制地等候,获取数据源并将其供给给 data_callback()。可是,该数据回调自己或许需求依靠其他数据的可用性。一起操作多个数据源的最简略办法便是将它们的内容存储在一个全局变量中,并东京热视频当该数据被运用时清空这些变量。比如说,根本的回调办法或许类似于清单 2:

清单 2. 两个源的根本数据回调

var other_data = null;
function processOtherData(responseText) {
other_data = responseText;
}
function processData(this_data) {
var delay = 1000; // Keep trying at 1-仙女second intervals
if (other_data == null) {
setTimeout(function() { processData(this_data); }, delay);
return梧桐树;
}
// We have both this_data and other_data
displayThisAndThat(this_data, other_data);
// Reset other_data now that we have consumed it
other_data = null;
}

应用程序将调用 getResource(uri1,processOtherData,...) 办法, 然后将在别处调用 getResource(uri2,processData,...) 办法。后边这个调用将运转好湿一个回调从内部 “轮询” other_data直到它实践填入了数据,并夏利在该数据被处理后将它清空。另一个信号量或许与以下操作相关,防止重复后边这个调用,直到第一次测验成功而且/或针对延时的 processData() 调用 clearTimeout(),有利于更新的恳求。

结束语

数据和谐的详细应用在任何品种的应用程序中的复杂度都会有所不同 — 而不仅仅是 Ajax 应用程序。本文所供给的示例只运用一个主数据表明函数 processData() 和一个有用的回调来获取额定的数据,即 processOtherData()。可是,这种形式十分简单应用到广泛的彼此依存的数据源。

developerWorks Ajax 资源中心

拜访 Ajax 资源中心,其间供给了关于开发 Ajax 应用程序的各种免费东西、代码和信息。由 Ajax 专家 Jack Herrington 办理的 动态 Ajax 社区论坛 为 Ajax 开发人员供给了彼此沟通和处理问题的渠道。

在任何状况下,getResource() 函数都是一个很好的通用结构,它可用于处理在 HTTP 上获取数据时遇到的问题。一般,该拜访终究都会成功,条件是在表达恳求时没有发作客户端过错。也便是说,时间短的网络和服务器过错只意味着延时,而不是毛病。当然,在 Ajax 应用程序中,咱们需求运用一些特别的技巧来从多个域中获取数据。其办法一般是 将 XMLHttpRequest() 目标放置在独自躲藏的 IFrames 中以轮询不同的域,不过这对异步和谐毫无特别之处。

标签: 未定义标签
admin 14文章 0评论 主页

  用户登录