0

我正在尝试将 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 中可能不起作用。任何帮助都表示赞赏。

4

3 回答 3

1

正如你所建议的,这是不可能的。请注意,您需要使用 JSONP+GET 向第三方服务器发出任何请求,但必应翻译 API只接受 POST 请求。尽管在您的代码中指示了 POST(使用 Chrome 开发人员工具或类似工具来检查这一点),但浏览器仍在使用 GET 来处理您的请求,因为 JSONP 和 POST 不兼容(请参阅此处)。

以前版本的必应翻译 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. 尝试执行 GET 而不是 POST
  2. 而不是您拥有的参数,将它们放入查询字符串中,即 https://?clientid=&etc。等等
于 2012-05-16T01:19:38.333 回答