IBM watson权衡分析javascript小部件返回一些未知错误

时间:2015-08-18 02:01:12

标签: ibm-watson

我正在尝试运行IBM Watson的Tradeoff Analytics小部件,以显示网页中的权衡分析图。 Tradeoff Analytics API正常启动,但当我将问题提交给show the graph时,我得到一些未定义的错误。 以下是我使用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-Authenticate:Basic realm =&#34; IBM Watson Gateway Log-in&#34; 。此外,我在javascript控制台中得到以下错误 XMLHttpRequest无法加载。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39;&#39;因此不允许访问。响应具有HTTP状态代码401。

有人可以帮我解决这里可能出现的问题吗?

PS:我已经交叉检查了我的用户名和密码,它们似乎通过基于REST的API调用正常工作。

1 个答案:

答案 0 :(得分:1)

根据您的代码,您尝试使用客户端小部件。您需要拥有一个可以接收请求并使用usernamepassword的代理应用。

在您的客户端,您将需要以下内容:

<强> 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);
  });
});

上面您将找到如何使用expresswatson-developer-cloud npm模块实现代理的示例。

您可以在github

中查看完整示例