2014-12-10 3 views
0

Я хочу дать функции request.onload переменной и добавить request.response в эту переменную. Как мне это сделать?Как передать переменную в HttpRequest?

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

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

Это не работает, потому что оно забывает, что такое цель.

ответ

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); 
}); 
+0

У меня есть несколько объектов, и я хочу использовать простой вызов функции для запроса информации, а затем добавить ее в объект по своему выбору. Для этого и предназначалась цель. В любом случае, спасибо, я никогда не понимал, что такое обратные вызовы, но теперь я это делаю. Это сработало. – user3032989

Смежные вопросы