Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js-使用php代理获取-代理未被解释?_Javascript_Php_Backbone.js_Proxy_Fetch - Fatal编程技术网

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

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 = [];

我正在尝试从RSS源获取一个集合。这是XML数据。我遇到了跨域问题,所以我设置了一个代理。提取总是返回一个错误,称为“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

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

谢谢

编辑:

啊,我想我看错了你的问题

你需要检查你的服务器设置,看看你的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环境进行了正确的配置。