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

时间:2013-12-08 16:37:36

标签: javascript php backbone.js proxy fetch

我正在尝试从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。

我不明白为什么我的代理文件没有被解释。如果有人已经遇到这个问题,请告诉我。

感谢。

1 个答案:

答案 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服务。