1

我正在用 JavaScript 构建一个复杂的应用程序,它需要向服务器发出多个请求。有时该请求无法在发送时完成,并且需要添加信息。我希望能够让服务器在请求的响应中通知应用程序需要更多信息并描述如何检索该信息。

例如,假设用户尝试执行其当前权限级别不允许的操作。服务器需要向应用程序询问覆盖授权码,这基本上意味着应用程序需要弹出一个对话框,询问管理员密码。

我想要某种抽象所有这些的框架。可能是一个主要的“请求”或“操作”类,我可以定义子请求类来定义请求的可能解释。我不确定这样的事情是否已经存在。

所以我想我的问题是:1)这样的框架存在吗?2)是否有关于这个主题的文章(平台和语言不可知,我可以从任何来源了解它们是如何工作的)。我知道像 Dojo 和 ExtJS 这样的框架在他们的数据存储中使用了类似的东西,但我不确定它是否正是我所需要的,或者它是如何工作的。

感谢您为我提供正确方向的任何帮助,谢谢。

编辑:

应该指出一点,我正在寻找从用于实际将数据发送到服务器的技术中抽象出来的东西。这样我就可以在不同的 ajax 技术上使用相同的框架。

基本上我正在寻找可以帮助我弄清楚如何创建自定义“应用程序协议”的框架或文章。这方面的一个例子是:

{
    type: 512,
    success: true,
    data: { some: "data" }
}

我知道我必须自己设计协议,但我需要帮助的是创建一个“类”或自动解释该协议的东西,而不是仅仅进行冗余onSuccess回调

4

7 回答 7

2

我从事过一个名为 Pomegranate Framework 的开源项目,它可以满足您的需求(在某种程度上)。也许您可以扩展它以满足您的需求。它带有一个接近您所要求的应用程序层,但您需要实现适合您的协议。这是它的地址:

石榴框架

我还没有时间来记录它,但它附带了一堆可能对您有用的示例。您可能还想看看它的示例页面:

石榴框架示例

我想您希望看到标题为“在客户端处理服务器错误”的 021 示例。我希望这是你正在寻找的。

于 2012-08-06T05:21:34.580 回答
1

使用DojojQueryDeferred对象进行回调。它是Promise设计模式的一种实现。每个动作都有一个成功回调链和一个失败回调链,两个链可以在链的各个点发散或合并,并且链可以分支以创建子延迟。

于 2012-08-06T04:59:35.737 回答
1

如果您知道客户端上应用程序的状态(并且只有少数错误原因,并且您不需要来自服务器的详细信息),则可以并且应该使用 HTTP 状态代码。据我所知200是唯一一个有正文的,所以你不能(或不应该,总是添加标题,但我会远离那条路径)传输任何其他东西 - 但每个框架都应该为你提供在发送请求时传递错误处理程序的方法。在作为错误处理程序传递的回调函数中,您只需执行相应状态要求的任何操作。

它受协议支持,无论您是否传递 HTML、JSON 或其他任何内容,每个值得使用的库都支持基于状态代码的错误回调。

于 2012-08-07T12:22:05.860 回答
0

由于您基本上是在谈论“服务器端推送事件”,因此您需要一些技术来允许您的服务器脚本向您的客户端发送数据。

有一些众所周知的方法,如 COMET、Flash Sockets 和城里最新的 WebSockets。

由于 WebSockets 可能是所有这些中最复杂的东西,因此您应该以此为目标。不幸的是,它的浏览器支持仅限于大多数浏览器的“最新版本”,如果您对此感到满意,请立即使用它们。如果你想为旧版浏览器做一些后备,最常用的框架应该是socket.IO.

但即使是 socketIO 也只是为你抽象了所有不同的通信技术。无论如何,围绕它自己构建一个可靠的管理框架应该是相当容易的。所以我在这方面的回答是,我不知道有任何库或框架可以处理这类东西。

于 2012-07-30T18:42:20.823 回答
0

使用 ExtJs 有多种方法可以实现这一点。

最简单的方法是使用Ext.Ajax.request()提供url, params, method。然后在您的成功处理程序中,检查服务器响应以及它是否需要来自用户的其他数据 - 显示一个额外的凭据对话框,并发送另一个请求,其中包含将解锁服务器端脚本的额外凭据详细信息。

请注意,success请求方法的处理程序在其options参数中将请求的配置对象返回给您,因此您可以很容易地再次调用相同的请求,这次只需添加额外的凭据。

这是一个演示这个概念的jsfiddle 代码(我已经展示了对所有调用都使用成功和全局处理程序 - 我希望你能够从这里弄清楚如何使用它)。还有一个类似的,我相信它更符合您的需求。

我很乐意提供进一步的帮助,只要问问题。

于 2012-08-06T02:30:35.883 回答
0

如果你想要抽象和可测试性,我强烈推荐 AngularJS。angular $qKris Kowal 的 Q的实现。您可以创建服务来隐藏您调用服务器的方式,并允许您在将来更改服务器的实现方式,这不会很痛苦。

于 2012-08-09T00:33:42.557 回答
0

它看起来像服务器推送的问题,即无论发生变化,数据都会被推送到客户端有以下选项

商业 网络同步

您可以像这样使用长轮询机制

(

function poll(){
    $.ajax({ url: "server", success: function(data){
         myobject.setValue(data.value);

    }, dataType: "json", complete: poll, timeout: 30000 });
})();

您将在ajax 推送服务器上获得更多信息

于 2012-08-09T04:23:27.537 回答