【发布时间】:2012-05-24 19:55:12
【问题描述】:
我正在使用 Backbone.js 构建一个通常通过 JSON 与 Web 服务通信的应用程序。
一个 Web 服务将在成功时返回 JSON 或在错误时返回 XML(聪明,是吗?)。我需要解析这个 XML 响应来确定错误,但是 Backbone 以 JSON 为中心的思维给我带来了问题。
我有一个包含解析函数的集合。解析函数总是在服务返回 JSON 时被调用,在这种情况下我只是返回响应对象。但是,当服务返回 XML 时,我的 fetch 调用的错误回调函数被调用,并传递了一个带有 arguments[1] 或 parseerror 的错误对象。进一步挖掘显示有一个意想不到的< 字符。
为什么在抛出 parseerror 之前没有调用我的 parse 函数来解析 XML?此外 - 为什么在成功的 JSON 调用中,它传递了一个 JavaScript 对象(表明 JSON 字符串已经被解析)?解析函数不应该做解析吗?
下面的相关代码,任何建议都非常感谢。
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;
【问题讨论】:
-
解析错误可能来自 jQuery 或 XMLHttpRequest,而不是来自主干。返回的响应是否带有适当的 Content-Type,例如
application/xml?返回的 XML 格式是否正确? -
@breischl 感谢您的输入,这方面的一切看起来都不错 - Content-Type 是
application/xml和 w3schools.com/xml/xml_validator.asp 告诉我 XML 格式正确 -
是否有人在某个地方在请求中设置了 jQuery
dataType选项?可能是在$.ajaxSetup()或$.ajaxStart()通话中完成的?如果不是这样,我想尝试在 Backbonesuccess和error函数中设置断点,看看是否会产生更多信息。
标签: xml ajax parsing backbone.js