我正在尝试运行IBM的Tradeoff Analytics小部件,以便在网页中显示折衷分析图。正在正常启动,但是当我将问题提交给图形显示时,我会得到一些未定义的错误。下面是我使用的运行Tradeoff Analytics Widget的示例代码。
function errorHandler(payload){
alert(payload.errorMessage);
}
function onShowCompleteCB(payload){
alert('show Tradeoff graph complete');
}
function onStartCB(payload){
alert('sending trade-off problem');
var problem = <problem-json>;
taClient.show(problem, onShowCompleteCB);
}
var options = {
dilemmaServiceUrl : <tradeoff-service-url>,
username : <username>,
password : <password>
};
var taClient = new TradeoffAnalytics(options , document.getElementById('watson_widget'));
var s = taClient.subscribe('afterError', errorHandler);
taClient.start(onStartCB);我还从javascript调试器中注意到,HTTP对最后一个请求的响应返回了响应头WWW认证:Basic realm="IBM网关登录“。此外,我在javascript控制台中得到了以下错误,XMLHttpRequest无法加载。请求的资源上没有“访问-控制-允许-原产地”标题。因此,“原产地”不允许访问。响应具有HTTP状态代码401。
有人能帮我解决这里可能出的问题吗?
PS:我已经交叉检查了我的用户名和密码,通过基于REST的API调用,它们似乎工作得很好。
发布于 2015-08-18 02:20:09
基于您的代码,您正在尝试使用客户端小部件。您需要一个代理应用程序来接收请求并使用您的username和password。
在你的客户端,你需要这样的东西:
HTML:
<div id='DIV_ID'></div>JS:
taClient = new TA.TradeoffAnalytics({
customCssUrl: 'https://ta-cdn.mybluemix.net/v1/modmt/styles/watson.css',
dilemmaServiceUrl: '/proxy',
profile: 'basic'
}, 'DIV_ID');
taClient.subscribe('afterError', function onError(){ /* on error */});
taClient.start(function onLoad(){ /* on load */});
}服务器端(Nodejs):
var tradeoffAnalytics = watson.tradeoff_analytics({
version: 'v1',
username: '<username>',
password: '<password>'
});
app.post('/proxy', function(req, res) {
tradeoffAnalytics.dilemmas(req.body, function(err, dilemmas) {
if (err)
return res.status(err.code || 500).json(err.error || 'Error processing the request');
else
return res.json(dilemmas);
});
});上面,您将找到一个如何使用express和watson-developer-cloud npm模块实现代理的示例。
在github中可以查看完整的示例
https://stackoverflow.com/questions/32062402
复制相似问题