我知道由于异步XMLHTTPRequest的性质,不可能在javascript中返回responseText值。我通过调用一个解决方法函数找到了解决问题的方法,该函数将reponseText粘贴到我提供函数的任何ID中。但是现在我再次偶然发现了这个问题,因为我需要检索一个JSON文件并返回它的值。我已经尝试将responseText注入一个提供的变量,但是它不起作用,我还尝试添加一个“类似接口”的文件,这对我来说就是这样,但是上面没有一个工作。这个问题是否有任何已知的解决方法?
function httpGetJson( file, type) {
self.httpState(true);
try{
var type = type || true;
var http = self.http();
http.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200){
returnJson(this.responseText);
}
}
http.open("GET", "json/" + file, type);
http.send();
}catch (err){
return log.error("http.httpGetJson", err.message);
}
self.httpState(false);
}
上查看所有内容
答案 0 :(得分:0)
您应该添加回调或Promise。例如,您的函数接收函数
function httpGetJson(file, type, cb) {
self.httpState(true);
try{
var type = type || true;
var http = self.http();
http.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200){
cb(this.responseText);
}
}
http.open("GET", "json/" + file, type);
http.send();
}catch (err){
return log.error("http.httpGetJson", err.message);
}
self.httpState(false);
}
然后你可以称之为:
httpGetJson('foo', 'bar', function (result) {
// do something with result
});
而不是:
var result = httpGetJson('foo', 'bar');
// do something with result
后者根本不适用于JS,不要试图'克服'那个。 如果你真的想要它,有一种不推荐使用的方法来执行同步http请求,你可以谷歌(但请,不要)。