Javascript 从[ajax]函数内部获取返回值
如何从函数中获取“res”的返回值。当我试图访问它时,它显示未定义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(
函数解决方案(){
变量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()未显示任何内容