我正在尝试从RSS源中获取集合。这是XML数据。我遇到了跨域问题,所以我设置了一个代理。 fetch总是返回一个错误,说“parsererror”。我认为这是因为我的代理不被解释。以下是我的代码:
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等于parsererror,因为响应不是xml。
我不明白为什么我的代理文件没有被解释。如果有人已经遇到这个问题,请告诉我。
感谢。
答案 0 :(得分:0)
修改强>
啊我觉得我读错了你的问题......
您需要检查您的服务器设置,看看您的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'和'type'参数,它们只适用于jsfiddle的echo服务。