我试图通过主干从服务器接收图像。后端应用程序使用CakePHP(我猜这当下并不重要)。后端返回一个JSON响应:
{"id":"4","waypoint_id":"56","user_id":"1","name":"Penguins.jpg","type":"image\/jpeg","size":"777835","created":"2014-03-10 18:05:29","modified":"2014-03-10 18:05:29","owner":"Nikel Weis"}
到目前为止哪个好 - 但是一旦我添加了包含数据库中实际blob的data属性,它就不起作用。我尝试使用以下代码将其编码为base64字符串(在php中):
$response['data'] = base64_encode($response['data']);
然后客户回来:
OPTIONS http://mytour.localhost/api/file/4 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4400' is therefore not allowed access.
但标题已设定。我在骨干网中的文件模型看起来很像(非常简单):
define([
'jquery',
'jqm',
'underscore',
'backbone',
], function($, jqm, _, Backbone) {
File = Backbone.Model.extend({
idAttribute: 'id',
urlRoot: '/api/file',
initialize:function(attributes, options) {
},
});
return File;
});
那么如何使用骨干接收(base64编码)文件?或者我的方法是完全错误的吗?
编辑: 已发送标头:
$this->response->header('Access-Control-Allow-Origin', '*');
$this->response->header('Access-Control-Allow-Headers', 'X-Requested-With');
当base64encoded字符串不存在时,我能够收到响应。
编辑 - 解决方案: 我应该提到的是,我正在使用涟漪来模拟手机上的环境。现在我已经想出了几件事:
问题不在于base64编码 - 当字符串超过4000个字符时出现问题。涟漪无法正确处理服务器的响应。
Ripple具有代理跨域请求的功能。我把那个代理关掉了。通过将代理切换到本地或远程,JSON-Response中的~4000个字符的限制没有开始。这不是JSON的缺点或者由于事实上回传给客户端的字符串没有限制。