Backbone.js を使用して、通常は JSON 経由で Web サービスと通信するアプリケーションを構築しています。
1 つの Web サービスは、成功した場合は JSON を返し、エラーが発生した場合は XML を返します (賢いですね)。この XML 応答を解析してエラーを特定する必要がありますが、Backbone の JSON 中心の考え方が問題を引き起こしています。
解析関数を含むコレクションがあります。解析関数は、サービスが JSON を返すときに常に呼び出されます。この場合、単純に応答オブジェクトを返します。ただし、サービスが XML を返すと、フェッチ呼び出しのエラー コールバック関数が呼び出され、arguments[1]
of でエラー オブジェクトが渡されますparseerror
。<
さらに掘り下げると、予想外のキャラクターがあったことがわかります。
parseerror がスローされる前に、XML を解析するために解析関数が呼び出されないのはなぜですか? さらに、成功した JSON 呼び出しで JavaScript オブジェクトが渡されるのはなぜですか (JSON 文字列が既に解析されていることを示しています)。parse 関数は解析を行うはずではありませんか?
以下の関連コード、どんな提案も大歓迎です。
var myCollection = Backbone.Collection.extend({
initialize : function() {
...
},
fetch: function(options) {
var options = {data: {...}, error: this.onFetchError};
Backbone.Collection.prototype.fetch.call(this, options);
},
onFetchError: function(arg1, arg2, arg3) {
debugger
},
parse: function(response) {
debugger
if(typeof response === 'object') {
return response;
}
}
});
return myCollection;