Backbone.js-使用php代理获取-未解释代理


Backbone.js - Fetch with a php proxy - proxy not interpreted?

我正试图从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服务。