Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从[ajax]函数内部获取返回值_Javascript_Jquery_Ajax_Api - Fatal编程技术网

Javascript 从[ajax]函数内部获取返回值

Javascript 从[ajax]函数内部获取返回值,javascript,jquery,ajax,api,Javascript,Jquery,Ajax,Api,如何从函数中获取“res”的返回值。当我试图访问它时,它显示未定义 函数解决方案(){ 变量url=”https://translate.yandex.net/api/v1.5/tr.json/translate", keyAPI=“abcdefgh” var xhr=new XMLHttpRequest(), textAPI=“一些文本”, langAPI=“fr” data=“key=“+keyAPI+”&text=“+textAPI+”&lang=“+langAPI; xhr.open(

如何从函数中获取“res”的返回值。当我试图访问它时,它显示未定义

函数解决方案(){
变量url=”https://translate.yandex.net/api/v1.5/tr.json/translate",
keyAPI=“abcdefgh”
var xhr=new XMLHttpRequest(),
textAPI=“一些文本”,
langAPI=“fr”
data=“key=“+keyAPI+”&text=“+textAPI+”&lang=“+langAPI;
xhr.open(“POST”,url,true);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
发送(数据);
xhr.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
var res=this.responseText;
返回res;
}
}
}
您必须使用或回调方法来实现这一点
Promise
相对较新,并非所有浏览器都支持它

承诺方法

function solution() {
  return new Promise(function(resolve, reject) {
    var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
      keyAPI = "abcdefgh"
    var xhr = new XMLHttpRequest(),
      textAPI = "some text",
      langAPI = "fr"
    data = "key=" + keyAPI + "&text=" + textAPI + "&lang=" + langAPI;
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(data);
    xhr.onreadystatechange = function() {
      if (this.readyState == 4) {
        var res = this.responseText;
        this.status == 200 ? resolve(res) : reject('error');
      }
    }
  });
}
function solution(success, failure) {
  var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
    keyAPI = "abcdefgh"
  var xhr = new XMLHttpRequest(),
    textAPI = "some text",
    langAPI = "fr"
  data = "key=" + keyAPI + "&text=" + textAPI + "&lang=" + langAPI;
  xhr.open("POST", url, true);
  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr.send(data);
  xhr.onreadystatechange = function() {
    if (this.readyState == 4) {
      var res = this.responseText;
      this.status == 200 ? success(res) : error('error');
    }
  }
}
如何获得响应

solution().then(function(res) {
  console.log(res);
}, function(err) {
  console.log(err);
});
solution(function(res) {
  console.log(res);
}, function(err) {
  console.log(err);
});
回调方法

function solution() {
  return new Promise(function(resolve, reject) {
    var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
      keyAPI = "abcdefgh"
    var xhr = new XMLHttpRequest(),
      textAPI = "some text",
      langAPI = "fr"
    data = "key=" + keyAPI + "&text=" + textAPI + "&lang=" + langAPI;
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(data);
    xhr.onreadystatechange = function() {
      if (this.readyState == 4) {
        var res = this.responseText;
        this.status == 200 ? resolve(res) : reject('error');
      }
    }
  });
}
function solution(success, failure) {
  var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
    keyAPI = "abcdefgh"
  var xhr = new XMLHttpRequest(),
    textAPI = "some text",
    langAPI = "fr"
  data = "key=" + keyAPI + "&text=" + textAPI + "&lang=" + langAPI;
  xhr.open("POST", url, true);
  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr.send(data);
  xhr.onreadystatechange = function() {
    if (this.readyState == 4) {
      var res = this.responseText;
      this.status == 200 ? success(res) : error('error');
    }
  }
}
如何获得响应

solution().then(function(res) {
  console.log(res);
}, function(err) {
  console.log(err);
});
solution(function(res) {
  console.log(res);
}, function(err) {
  console.log(err);
});

你可以这样试试。希望它的作品-

因此,您的
XHR
函数有一个回调函数来获取返回值

function solution(callback) {
  var url = "https://translate.yandex.net/api/v1.5/tr.json/translate",
      keyAPI = "abcdefgh";
  var xhr = new XMLHttpRequest(),
      textAPI = "some text",
      langAPI = "fr";
  data = "key=" + keyAPI + "&text=" + textAPI + "&lang=" + langAPI;
  xhr.open("POST", url, true);
  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr.send(data);
  xhr.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
       var res = this.responseText;
       callback(res);
     }
   }
}
调用
XHR
函数时:

solution(function(response){
  // you will get the response over here 
});

将return res移出if语句您不能使用
return
从函数返回异步请求的结果。我希望函数“solution”返回“res”的值。如何将返回值存储在函数外部的变量中?不能,异步代码不是这样工作的。有关更多信息,请参见复制:可能的复制是否有其他方法可以从函数中获取res的值,以便在函数之外使用?我只想把xhr的响应从函数中提取为字符串。有没有其他方法可以从函数中获取res的值,以便在函数之外使用?我只想将来自xhr的响应从函数中提取为字符串,并存储在变量中进行字符串比较。console.log()未显示任何内容