Bing Translator EXT JS Access Token

时间:2012-05-10 11:03:36

标签: extjs localization token microsoft-translator

我正在尝试将Bing翻译器连接到我的EXT JS。我在尝试获取访问令牌时遇到了麻烦。无论我尝试过什么,我都会得到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/不允许的请求。也许它正在做这个客户端?或者https url在Ajax.request中不起作用。任何帮助都赞赏。

3 个答案:

答案 0 :(得分:1)

如你所知,这是不可能的。请注意,您需要使用JSONP + GET向第三方服务器发出任何请求,但Bing转换器API only accepts POST requests。尽管在您的代码中指示了POST,但浏览器仍在使用GET进行请求(使用Chrome开发者工具或类似方法进行检查),因为JSONP和POST不兼容(请参阅here)。

以前版本的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);
  }
});

答案 1 :(得分:0)

对Ext.Ajax不太熟悉,但试试这个:

  1. 尝试执行GET而不是POST
  2. 而不是你拥有它们的params,把它们放入一个查询字符串,即https://?clientid =&amp; etc.等

答案 2 :(得分:0)

您不能使用Ext.Ajax跨域,您需要使用JSONP或表单发布来从第三方域获取数据。