すでにサーバー側にトークンを取得してクッキーに保存していますが、そのトークンでAPIにクエリを実行するとエラーが発生します。私はdataType:jsonp
を使用しない場合iBMを使用している場合のクライアント側のエラーサーバー側でBluemixトーンアナライザトークンを取得しました
$.ajax({
url:'https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone',
data:{
'X-Watson-Authorization-Token':readCookie('token'),
'text':input,
'version':'v3',
'version_date':'2016-05-19'
},
dataType:'jsonp',
contentType:'application/json',
method:'GET',
success:function(tone){
console.log(tone);
}
});
が、私はノーアクセスコントロール由来のエラーを取得:
は、ここで私が送信していjQueryのAjaxのリクエストです。 contentType:application/json
を使用しないか、contentType:application/javascript
を使用すると、ユーザー名とパスワードの入力を要求されたときにログインダイアログが表示されます。しかし、私はトークンを持っているので、ユーザー名とパスワードを渡す必要はありません。そして、私がdataTypeとcontentTypeの両方でこの方法で実行すると、400エラーが発生します。
誰かが私が間違っていることを知っていますか?ドキュメントでは、クライアント側でトークンを使用できると言いますが、サーバー側でトークンを取得する必要があります。
UPDATE:アドバイスを1として
、私は別のPHPファイルのjqueryのAJAX呼び出しを介してサーバー側のコードにアクセスしていません。私はトークンを取得することができますが、それをトーンアナライザのAPIコールに渡すと400エラーが発生します。私がトークンをデコードするかどうかにかかわらず。ここで
は私のjQueryのです:
$.when($.ajax({
url:'watsonToken.php',
type:'GET',
})).done(function(token){
console.log('watsonToken, lasts 1 hour: ', decodeURI(token));
$.ajax({
url:'https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone',
type:'POST',
data:JSON.stringify({
'body':input,
'version':'2016-05-19'
}),
contentType:'application/json',
headers:{
'X-Watson-Authorization-Token':decodeURI(token)
},
success:function(tone){
console.log(tone);
},
error: function(error){
console.error('Error: Couldn\'t use token: ', error);
}
});
}).fail(function(){
console.error('Error: Couldn\'t fetch watson token');
});
とトークンを取得しwatsonToken.phpファイル:
<?php
$accessWatsonToken = curl_init();
$params=http_build_query(array('url' => 'https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone'));
curl_setopt($accessWatsonToken, CURLOPT_URL, "https://gateway.watsonplatform.net/authorization/api/v1/token?$params");
curl_setopt($accessWatsonToken, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($accessWatsonToken, CURLOPT_USERPWD, 'username':password');
print curl_exec($accessWatsonToken);
curl_close($accessWatsonToken);
?>
ああ、私はそれはあなたがヘッダを渡す方法です知りませんでした。しかし今、私は403エラーが発生します: 'MLHttpRequestはhttps://gateway.watsonplatform.net/tone-analyzer/api/v3/toneを読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。したがって、Origin 'https:// domaincom'はアクセスできません。応答はHTTPステータスコード403でした。 ' – wordSmith
あなたはlocalhostなどから実行していますか?トークンの使用を除いて、上記のコードの正確なコピーを試しましたか? –
私はこの正確なコードを使用して、これを実際のサーバー上でオンラインで実行しています。 – wordSmith