首先,我必须说我是Google Closure的新手,但我正在学习:)
好的,所以我正在制作一个非常大的网络应用程序,我认为在一个XhrManager中管理所有AJAX请求会很好。没问题。
但是,是否有可能首先检查错误的某种默认回调,必要时显示错误,然后当它通过时,启动“真正的”回调?我在谈论像decoders in amplify.js这样的功能。这是他们的解释:
解码器允许您在调用成功或错误回调之前解析ajax响应。这允许您返回标记有状态的数据并做出相应的反应。这也允许您在将数据传递给回调之前以任何方式操作数据。
我知道这听起来很复杂(而且确实如此),所以我不太擅长解释这一事实也很有帮助,但是,是的。
我现在脑子里的解决方案是创建一个存储所有'真实回调'的对象,其中'错误检查回调'会在完成检查后执行正确的回调,但我觉得有点hack-ish我认为必须有一个更好的方法。
答案 0 :(得分:1)
由于始终必须解码/验证您的AJAX数据(您现在从不信任从服务器返回的数据吗?),您总是会去为不同类型的AJAX有效载荷提供不同的解码器/验证器。因此,您可能应该将解码器/验证程序例程作为AJAX回调本身传递 - 对于所有数据类型通用的验证,在回调中调用公共函数。
这样做的另一个好处是能够翻译"将未编码的JSON对象转换为" mangled" JSON对象,这样您就不必在代码中使用带引号的属性访问。
例如,假设您的AJAX有效内容包含以下JSON对象:
{ "hello":"world" }
如果您想在代码中引用hello
属性并仍然通过编译器的高级模式,则需要执行obj["hello"]
。但是,如果您将解码器作为回调传入,并执行第一行:
var decoded = { hello:response["hello"] };
然后在返回decoded
作为AJAX响应之前进行错误检查等。在您的代码中,您只需执行obj.hello
,所有内容都将通过高级模式进行优化和修改。