如何将变量传递给HttpRequest?

时间:2014-12-10 18:43:36

标签: javascript xmlhttprequest

我想给request.onload函数一个变量,并将request.response添加到该变量中。我该怎么做?

function loadathing(url, target){
    var request = new XMLHttpRequest();
    request.open("GET", url, true);

    request.onload = function() {
        target = request.response;
    };
}

这不起作用,因为它会忘记目标是什么。

1 个答案:

答案 0 :(得分:1)

这里有两个问题。首先,为了将响应传递给target,您需要在目标属性上进行,而不是直接定位,因为目标不能是本机值(字符串和数字等原生值不能通过引用传递。

function loadathing(url, target){
    var request = new XMLHttpRequest();
    request.open("GET", url, true);

    request.onload = function() {
        target.response = request.response;
    };
}
var target = {};
loadathing('foo.php', target); 

其次,由于您正在执行异步ajax请求,因此您需要向函数添加回调,以便外部代码知道何时填充target.response

function loadathing(url, target, cb){
    var request = new XMLHttpRequest();
    request.open("GET", url, true);

    request.onload = function() {
        target.response = request.response;
        cb();
    };
}
var target = {};
loadathing('foo.php', target, function () {
    console.log(target.response);
});

然后,您可以通过一起删除目标并使用回调来简化它。

function loadathing(url, cb){
    var request = new XMLHttpRequest();
    request.open("GET", url, true);

    request.onload = function() {
        cb(request.response);
    };
}
loadathing('foo.php', function (response) {
    console.log(response);
});