Google Closure:集中式AJAX'解码器'?

时间:2012-02-01 20:36:48

标签: javascript ajax error-handling google-closure

首先,我必须说我是Google Closure的新手,但我正在学习:)

好的,所以我正在制作一个非常大的网络应用程序,我认为在一个XhrManager中管理所有AJAX请求会很好。没问题。

但是,是否有可能首先检查错误的某种默认回调,必要时显示错误,然后当它通过时,启动“真正的”回调?我在谈论像decoders in amplify.js这样的功能。这是他们的解释:

  
    

解码器允许您在调用成功或错误回调之前解析ajax响应。这允许您返回标记有状态的数据并做出相应的反应。这也允许您在将数据传递给回调之前以任何方式操作数据。

  

我知道这听起来很复杂(而且确实如此),所以我不太擅长解释这一事实也很有帮助,但是,是的。

我现在脑子里的解决方案是创建一个存储所有'真实回调'的对象,其中'错误检查回调'会在完成检查后执行正确的回调,但我觉得有点hack-ish我认为必须有一个更好的方法。

1 个答案:

答案 0 :(得分:1)

由于始终必须解码/验证您的AJAX数据(您现在从不信任从服务器返回的数据吗?),您总是会去为不同类型的AJAX有效载荷提供不同的解码器/验证器。因此,您可能应该将解码器/验证程序例程作为AJAX回调本身传递 - 对于所有数据类型通用的验证,在回调中调用公共函数。

这样做的另一个好处是能够翻译"将未编码的JSON对象转换为" mangled" JSON对象,这样您就不必在代码中使用带引号的属性访问。

例如,假设您的AJAX有效内容包含以下JSON对象:

{ "hello":"world" }

如果您想在代码中引用hello属性并仍然通过编译器的高级模式,则​​需要执行obj["hello"]。但是,如果您将解码器作为回调传入,并执行第一行:

var decoded = { hello:response["hello"] };

然后在返回decoded作为AJAX响应之前进行错误检查等。在您的代码中,您只需执行obj.hello,所有内容都将通过高级模式进行优化和修改。