我想给request.onload函数一个变量,并将request.response添加到该变量中。我该怎么做?
function loadathing(url, target){
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onload = function() {
target = request.response;
};
}
这不起作用,因为它会忘记目标是什么。
答案 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);
});