function httpGetAsync(url, callback) { let xmlHttp = new XMLHttpRequest(); xmlHttp.timeout = 30000; // msecs xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState != 4) return if (xmlHttp.status == 200) callback(xmlHttp.responseText); else proxy.setFailed(xmlHttp.statusText) xmlHttp.onreadystatechange = null; xmlHttp = null; } xmlHttp.open("GET", url, true); xmlHttp.send(null); } function translate(text, from, to) { console.log('start translate', text, from, to) let url = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=' + to + '&dt=t&q=' + encodeURIComponent(text); console.log("loading url", url); httpGetAsync(url, function (response) { console.log('received', response); let object = JSON.parse(response); let result = ''; object[0].forEach(function (element) { result += element[0] + ' '; }); proxy.setTranslated(result); }); } function init() { proxy.translate.connect(translate); }