【问题标题】:JavaScript Request/Operation Framework or Toolkit?JavaScript 请求/操作框架或工具包?
【发布时间】:2012-07-30 18:36:32
【问题描述】:

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

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

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

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

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

编辑:

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

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

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

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

【问题讨论】:

    标签: javascript frameworks request operation


    【解决方案1】:

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

    Pomegranate Framework

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

    Pomegranate Framework Examples

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

    【讨论】:

    • 这不是我想要的,因为你不能为数据结构(api、协议,不管你怎么称呼它)定义一个全球标准。虽然至少你有点明白想法,而每个人都完全错过了它。
    • 我告诉过你,你需要自己实现你的协议。它只是对如何做到这一点有一些想法。我自己在其中实现了一个错误层。通过它您可以在客户端获取和处理服务器错误。也许您想添加一个处理应用程序逻辑的新层。如果我能提供更多帮助,请告诉我。
    • 我会接受并奖励这个答案,因为它是唯一真正适合这个问题的答案。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

        • 实际上,这与我的要求无关。我不是在询问实际发送请求的技术。我正在使用 XHR 请求,因为实时不是必需的。但是,应该指出一点,我正在寻找从用于实际将数据发送到服务器的技术中抽象出来的东西。这样我就可以在不同的 ajax 技术上使用相同的框架。
        • @LordZardeck:好的,然后忽略以上所有内容。我对“服务器应该通知应用程序”感到困惑,而纯 XHR 无法做到这一点。
        • 在服务器发送的实际响应中。 “响应数据”如果你愿意
        【解决方案5】:

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

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

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            商业 WebSync

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

            (

            function poll(){
                $.ajax({ url: "server", success: function(data){
                     myobject.setValue(data.value);
            
                }, dataType: "json", complete: poll, timeout: 30000 });
            })();
            

            您将在ajax push server获得更多信息

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-10-31
              • 1970-01-01
              • 2011-08-19
              • 1970-01-01
              • 1970-01-01
              • 2015-04-18
              • 2011-09-07
              • 1970-01-01
              相关资源
              最近更新 更多