我正在尝试将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中不起作用。任何帮助都赞赏。
答案 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不太熟悉,但试试这个:
答案 2 :(得分:0)
您不能使用Ext.Ajax跨域,您需要使用JSONP或表单发布来从第三方域获取数据。