原生javascript返回http.responseText

时间:2017-04-25 10:58:20

标签: javascript json ajax

我知道由于异步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);
    }

在codepen http://codepen.io/mecostav/pen/JNdovR

上查看所有内容

1 个答案:

答案 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请求,你可以谷歌(但请,不要)。