Javascript Backbone.js-使用php代理获取-代理未被解释?
我正在尝试从RSS源获取一个集合。这是XML数据。我遇到了跨域问题,所以我设置了一个代理。提取总是返回一个错误,称为“parsererror”。我想这是因为我的代理没有被解释。下面是我的代码:Javascript Backbone.js-使用php代理获取-代理未被解释?,javascript,php,backbone.js,proxy,fetch,Javascript,Php,Backbone.js,Proxy,Fetch,我正在尝试从RSS源获取一个集合。这是XML数据。我遇到了跨域问题,所以我设置了一个代理。提取总是返回一个错误,称为“parsererror”。我想这是因为我的代理没有被解释。下面是我的代码: var OfferCollection = Backbone.Collection.extend({ model: OfferModel, url: 'proxy.php', parse: function(resp){ var dataArray = [];
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
我不明白为什么我的代理文件没有被解释。如果有人已经遇到这个问题,请让我知道
谢谢 编辑:
啊,我想我看错了你的问题
你需要检查你的服务器设置,看看你的php是否正常工作。
如果您的服务器没有执行php文件,这不是主干网的错
您使用的是什么服务器环境?您能在浏览器中访问php文件并查看返回的内容吗
如果您是在本地环境中开发的,您可能想尝试WAMP或XAMPP
=============
默认情况下,主干需要json响应
您需要将ajax调用的“数据类型”设置为“xml”,以便使用任何返回xml的服务
添加如下数据类型设置:
this.fetch({
dataType: 'xml'
});
或者,如果所有服务都返回xml,则需要覆盖Backbone.sync方法
==或者,在您的模型中:
fetch: function (options) {
options = options || {};
options.dataType = "xml";
return Backbone.Collection.prototype.fetch.call(this, options);
}
下面是我在回答另一个问题时使用的一个例子:
=======编辑:=============
更新的JSFIDLE:
您应该在控制台中看到您的集合
忽略fetch方法中的'data'和'type'参数,它们仅用于jsfiddle的echo服务。感谢您的回复。我试过了,但没有任何改变。我仍然有相同的响应/错误。它对我有效。你能发布你的回复吗?下面是我为您的案例更新的小提琴:它正确解析响应。编辑:您必须检查服务器设置。您在php环境中使用的web服务器。我在我的集合中添加了自定义获取,以将数据类型设置为xml。但是我仍然得到这些响应:responseText:proxy.php文件textStatus:parserror的确切内容可能是因为responseText是一个字符串,我认为问题来自于使用代理。在小提琴中,您使用的是本地文件。编辑:我在jsfiddle中使用apache2,它不是本地文件,而是使用jsfiddle的echo服务。这里的问题是因为您的服务器没有执行php,您必须确保您的服务器针对php环境进行了正确的配置。