0

BingトランスレータをEXTJSに接続しようとしています。アクセストークンを取得しようとして問題が発生しました。何を試しても、400件の悪いリクエストがあります。

これは私のコードです:

 var clientId = encodeURI("<my id>"),
    clientSecret = encodeURI("<my secret>"),
    scope = encodeURI("http://api.microsofttranslator.com"),
    grantType = encodeURI("client_credentials");        
    var params = {client_id     :  clientId,
                  client_secret :  clientSecret,
                  scope         :  scope, 
                  grant_type    :  grantType};
    Ext.Ajax.request({
               url     : "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/",
               method  : "POST",
               params  : params,
               success : function(response) {
                            alert("Success");
               },
               fail    : function() {
                            alert("Fail");
               }
    }); 

それは不可能だと思い始めています。これは、 https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/で許可されていないリクエストを行っていると思います。多分それはこのクライアント側をやっていますか?または、httpsURLがAjax.requestで機能しない可能性があります。どんな助けでも大歓迎です。

4

3 に答える 3

1

おっしゃる通り、無理です。JSONP+GET を使用してサードパーティのサーバーにリクエストを送信する必要がありますが、Bing Translator APIは POST リクエストのみを受け入れることに注意してください。JSONP と POST には互換性がないため (こちらを参照)、コードで POST を示しているにもかかわらず (Chrome 開発者ツールなどを使用してこれを確認してください)、ブラウザーは要求に GET を使用しています。

以前のバージョンの Bing Translator API は GET 要求を受け入れていましたが、現在はそうではありません。解決策: 独自のサーバー側サービスを実装してアクセス トークンと翻訳を取得し、後者をブラウザに返す必要があります。

ところで、これは JQuery を使用してアクセス トークンを取得する同様のコードであり、同じ理由で機能しません。

$.ajax({
  type: "POST",
  url: "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13",
  data: {client_id:"bbcat",client_secret: "SECRETKEY",
     scope: "http://api.microsofttranslator.com", grant_type: "client_credentials"},
  dataType: "jsonp",
  success: function(data) {
    console.log(data);
  },
  error: function(data) {
    console.error(data);
  }
});
于 2012-06-27T13:00:17.500 に答える
0

Ext.Ajax クロス ドメインは使用できません。サード パーティ ドメインからデータを取得するには、JSONP またはフォーム ポストのいずれかを使用する必要があります。

于 2013-03-17T06:19:49.693 に答える
0

Ext.Ajax にはあまり詳しくありませんが、これを試してみてください。

  1. POST の代わりに GET を実行してみてください
  2. パラメータの代わりに、クエリ文字列、つまり https://?clientid=&etc に入力します。等
于 2012-05-16T01:19:38.333 に答える