gpt4 book ai didi

backbone.js - 捕获主干同步错误

转载 作者:行者123 更新时间:2023-12-04 03:13:55 25 4
gpt4 key购买 nike

我需要在来自服务器的所有响应中捕获一个可能的登录页面,所以我全局覆盖了 Backbone.sync 以便我可以在传递它们之前检查所有错误。

Backbone.originalSync = Backbone.sync;

Backbone.sync = function (method, model, options) {
var originalSuccess, originalError;
console.log("sync override...");
// remember original success so we can call it if user logs in successfully
originalSuccess = options.success;
// proxy the error callback to first check if we get a login page back
originalError = options.error;
options.error = function (model, xhr, options) {
if (xhr.status === 200 && xhr.responseText === "") {
// parse error from empty response (jq1.9 invalid json, ok)
originalSuccess(model, xhr, options);
} else {
console.log("Sync error " + statusTxt + ", " + thrown.message);
if (xhr.status === 200 || xhr.status === 302 || xhr.status === 0) {
// login page returned instead of json...
// open a new window with relogon.html to trigger a new login
window.showModalDialog("../relogon.html");
} else {
// normal error, pass along
if (originalError) {
originalError(model, xhr, options);
}
}
}
};

// call the original sync
Backbone.originalSync(method, model, options);
};

当从 0.9.9 到 1.0 时,这很糟糕。看起来原始 Backbone.sync 以不同方式包装其错误处理程序,导致我的错误处理程序首先被调用,并带有 jquery xhr 签名。
我不得不将错误处理程序的签名更改为:
    options.error = function (xhr, statusTxt, thrown) {

好的,现在它可以工作了,但我觉得我做错了什么。

有一个更好的方法吗?

我尝试使用 jquery promise ,但我需要能够从错误状态切换到成功(调用 originalSuccess 时),这似乎不适用于 promise 。

最佳答案

所有同步错误都传递给模型的 error事件,因此您可以收听此事件。

来自 http://backbonejs.org/#Events-catalog :

"error" (model, xhr, options) — when a model's save call fails on the server.



要全局捕获错误,您可以使用 http://api.jquery.com/ajaxError/

关于backbone.js - 捕获主干同步错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16476874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com