2012-05-10 3 views
0

Я пытаюсь подключить переводчик Bing к моему EXT JS. У меня возникли проблемы с попыткой получить токен доступа. Независимо от того, что я пробовал, я получаю 400 плохих запросов.Bing Translator EXT JS Ток доступа

Это мой код:

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

не очень хорошо знакомы с Ext.Ajax, но попробуйте это:

  1. Попробуйте делать GET вместо POST
  2. Вместо Params, как вы их, поместить их в строку запроса, то есть по протоколу HTTPS : //? clientid = & и т. д.
1

Как вы можете предположить, это невозможно. Обратите внимание, что вам нужно использовать JSONP + GET для запроса любого запроса на сторонний сервер, но Bing Translator API only accepts POST requests. Браузер использует GET для вашего запроса, несмотря на указание POST в вашем коде (используйте Chrome Developer Tools или аналогичный, чтобы проверить это), потому что JSONP и POST несовместимы (см. here).

Предыдущая версия API-интерфейса Bing Translator поддерживает 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); 
    } 
}); 
0

Вы не можете использовать Ext.Ajax междоменное, вы необходимо использовать JSONP или сообщение формы для получения данных из стороннего домена.