我正试图从RSS提要中获取一个集合。它是XML数据。我遇到了跨域的问题,所以我设置了一个代理。fetch总是返回一个错误,称为"parserror"。我想这是因为我的委托书没有被解读。下面是我的代码:
var OfferCollection = Backbone.Collection.extend({
model: OfferModel,
url: 'proxy.php',
parse: function(resp){
var dataArray = [];
$(resp).find('item').each(function() {
var title = $(this).find('title').text();
dataArray.push({title: title});
});
return dataArray;
},
getOffers: function(){
this.fetch({
cache: false,
success: function(collection, response, options){
console.log('OK');
},
error: function(collection, response, options){
console.log(response.responseText);
console.log(options);
console.log(collection);
},
complete: function(xhr, textStatus) {
console.log(textStatus);
}
});
}
这是我的proxy.php文件:
<?php
header('Content-type: application/xml');
$url = 'my_rss_feed_link';
$handle = fopen($url, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}
?>
因此,每次它进入错误回调时,responseText是一个字符串,正好包含我的proxy.php文件,当然textStatus等于parserror,因为响应不是xml。
我不明白为什么我的代理文件没有被解释。如果有人已经遇到这个问题,请告诉我。
谢谢。
编辑:
啊我想我看错了你的问题。。。
您需要检查服务器设置,看看php是否正常工作。如果你的服务器没有执行php文件,这不是主干网的错
您使用的服务器环境是什么?您可以在浏览器中访问php文件并查看返回的内容吗?
如果您在本地环境中进行开发,您可能想要尝试WAMP或XAMPP
===============
默认情况下,主干网需要一个json响应。
您需要将ajax调用的"数据类型"设置为"xml",以便使用任何返回xml的服务。
添加dataType设置,如下所示:
this.fetch({
dataType: 'xml'
});
或者,如果所有服务都返回xml,则需要覆盖Backbone.sync方法。
===或者,在您的模型中:
fetch: function (options) {
options = options || {};
options.dataType = "xml";
return Backbone.Collection.prototype.fetch.call(this, options);
}
下面是我在回答的另一个问题中使用的一个例子:http://jsfiddle.net/5j57T/4/
==========编辑:===========
更新的jsfiddle:http://jsfiddle.net/5j57T/7/
您应该在控制台中看到您的集合。
忽略fetch方法中的"data"answers"type"参数,它们只用于jsfiddle的echo服务。