我正在BlueMix上开发移动混合应用程序。我刚按照here的说明添加了必要的工具。
Server Node.js代码(依赖项和ibmconfig变量已正确设置):
app.get(ibmconfig.getContextRoot() + '/hello', function(req,res){
res.send('World');
});
混合移动应用程序代码:
var setup = {
applicationId:'<applicationId>',
applicationRoute:'<applicationRoute>',
applicationSecret:'<applicationSecret>'
};
IBMBluemix.initialize(setup).then(function(config){
return IBMCloudCode.initializeService();
}).then(function(cloudcode){
cloudcode.get("/hello").then(function(data){
alert(data);
}, function(err){
alert("[ERROR] " + err);
});
});
很抱歉删除所有必要的东西。我的问题是这段代码实际上是在iOS设备上运行,而不是在Android上运行。 iOS的含义我收到World
提醒,但对于Android,我会收到[ERROR] "{\"code\":200,\"data\":\"World\"}"
提醒。无论我尝试做什么(例如设置内容类型标题),我总是转到 Android 设备上的 onFailure 功能。
我发现Android上的服务器响应被理解为字符串而不是JSON,因此我更改了IBMCloudCodeHybrid.js:第687行并添加了
if (response.constructor === 'abc'.constructor) {
response = JSON.parse(response);
}
if (_.has(response, "code") && _.has(response, "data") && response.code === 200) {
response = response.data;
} else {
defer.reject(response);
}
这样无论何时收到字符串,它都将转换为JSON。
这对我有用。
所以我的问题是,我是否必须这样才能使其在Android上运行?或者有一个正确的方法来做/我做错了什么?
或者Bluemix SDK出了什么问题?
答案 0 :(得分:0)
您应检查的第一项是发送给设备的内容类型标头。 对于json来说应该是&#39; application / json&#39; (或者&#39; application / javascript&#39;对于JSONP),很多时候库会检查它以选择正确的解析器。