【问题标题】:Backbone not fetching JSON from different host骨干网没有从不同的主机获取 JSON
【发布时间】:2015-10-12 20:39:02
【问题描述】:

我是 RESTful 概念的新手,现在正在学习 Backbone,但遇到了一些问题。

现在我正在使用backbone.js 在http://localhost 上运行一个单页应用程序,API 位于http://phalconapi(另一个虚拟主机)。

http://phalconapi 我有这个 jsontest.php 脚本返回 JSON:

<?php
header("HTTP/1.1 200 OK");
echo json_encode( ['test'=>1] );

http://localhost,这是我的 app.js 启用主干。

var FlightsList = Backbone.Model.extend({
    //urlRoot: '/jsontest.php'
    urlRoot: 'http://phalconapi/jsontest.php'
});

var DashboardController = BackboneMVC.Controller.extend({
    name: 'dashboard',

    home: function() {
        var flights = new FlightsList();

        flights.fetch({
            success: function(flights) {
                alert(flights.toJSON());
                console.log(flights.toJSON());
            },
            error: function(model, xhr, options) {
                console.log('Fetch error');
            }
        });
    }
});

var router = new BackboneMVC.Router();

Backbone.history.start({pushState: true});

所以问题是,每当我将主干中的urlRoot 设置为/jsontest.php 并将该文件放在同一目录中(在本地主机中)时,它就可以正常工作。

但是当我将其更改为http://phalconapi/jsontest.php 时,它就不起作用了。使用 Google Chrome 开发者工具时,我注意到“此请求没有可用的响应数据”消息。并且在使用/jsontest.php 作为urlRoot 的其他测试中没有出现。它应该在那里显示{"test":1}

【问题讨论】:

标签: javascript php json rest backbone.js


【解决方案1】:

通过在 api 上设置访问控制标头来修复它:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS');

这是一个 CORS 问题。谢谢半疯!

如果有人也在使用 Phalcon,请使用 $response-&gt;setHeader()

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2012-09-14
    相关资源
    最近更新 更多