Я новичок в концепции RESTful, сейчас изучаю Backbone и у меня возникли некоторые проблемы.
Сейчас я запускаю одностраничное приложение на HTTP: // локальный используя backbone.js и API находится на Http: // phalconapi (еще один vhost).
В Http: // phalconapi У меня есть этот скрипт jsontest.php, возвращающий JSON:
<?php
header("HTTP/1.1 200 OK");
echo json_encode( ['test'=>1] );
В HTTP: // локальный, это мой 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
и я помещаю этот файл в тот же каталог (в localhost), он работает просто отлично.
Но когда я изменяю это на http://phalconapi/jsontest.php
тогда это не сработает. Используя Google Chrome Developer Tools, я заметил сообщение «Этот запрос не содержит данных ответа». и это не обнаружилось в другом тесте, используя /jsontest.php
как urlRoot
, Прямо там это должно показать {"test":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->setHeader()
,
Других решений пока нет …