在我的Ember项目中,我使用以下代码从后端获取JSON响应:
Ember.$.getJSON(
mybackendurl.foo/mybarroute,
function (data) {
console.log(data);
});
在那里,我收到以下错误消息:SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
。
我的后端是使用Symfony用PHP编写的,而VoryxRESTGeneratorBundle是用来发送JSON的。当我在浏览器上访问http://mybackendurl.foo/mybarroute
时,我得到了一个很好的JSON响应:
{
"links":
[
{
"id": 28,
[...]
}
]
}
使用Ember时,看起来没有正确检测到答案。我不确定问题是来自后端还是前端。我该如何解决这个问题?
其他信息:
1)Ember中的此代码生成OPTION
请求,并返回空200响应:
Ember.$.ajax({
url: http://mybackendurl.foo/mybarroute,
type: 'GET',
contentType: 'application/json'
});
2)我没有使用chrome
的结果3)请求和响应标头
答案 0 :(得分:1)
更新
根据更新的请求响应标头,我猜你会遇到跨域问题。您的服务器在PORT 8000上运行,前端在端口4200上运行
要么考虑转到JSONP解决方案,要么在服务器中启用CORS。
因为浏览器不支持跨域,所以会出现错误,而ember认为这是一个糟糕的JSON。
以下是如何从symfony返回JSONP:
Returning JSONP from Symfony2 controller using AJAX call
一旦您的服务器在网址中支持callback
参数,并以callback({your json})
以下是如何使用Ember的jsonp:
答案 1 :(得分:1)
我认为您没有在服务器上配置CORS,除非正确配置CORS,否则您的浏览器无法从具有不同来源的内容接收数据。
如果你curl -IX OPTIONS http://whateverisyoururl
,它至少应该在标题中发送这样的内容:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS
这不是一个ember.js问题,它是一般的跨源请求问题。
答案 2 :(得分:0)
原来是nelmio_cors
中的配置问题。让我花费数小时的事情是缓存:max_age
设置为3600,所以我应该等待1小时才能看到效果。
将其设置为0解决了我的问题。
nelmio_cors:
defaults:
allow_credentials: true
allow_origin: ['*']
allow_headers: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept']
allow_methods: ['GET', 'POST', 'PUT', 'OPTIONS', 'PATCH', 'DELETE']
expose_headers: []
max_age: 0
hosts: []
origin_regex: false
paths:
'^/api/':
allow_origin: ['*']
allow_headers: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept']
allow_methods: ['GET', 'POST', 'PUT', 'OPTIONS', 'PATCH', 'DELETE']
max_age: 0
答案 3 :(得分:-1)
试试这个..
Ember.$.ajax({
url: http://mybackendurl.foo/mybarroute,
type: 'GET',
contentType: 'application/json',
dataType: 'json',
success: function(result){
console.log(result);
}});
你的网址也没有扩展名吗?我的意思是像mybarroute.php,.json,.js或.html?