JQuery/Ajax - $.ajax() Передача параметров для обратного вызова - хороший шаблон для использования?
JavaScript-код Я начинаю с:
function doSomething(url) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: rssToTarget
});
}
Я хотел бы использовать шаблон:
//where elem is the target that should receive new items via DOM (appendChild)
function doSomething(url, elem) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: rssToTarget(elem)
});
}
Я не думаю, что могу заставить callback работать таким образом, не так ли? Какова правильная картина? Я не хочу использовать глобальные переменные, чтобы временно удерживать имя elem
или elem.
Ответы
Ответ 1
Как это...
function doSomething(url, elem) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: function(xml) {
rssToTarget(xml, elem);
}
});
}
Ответ на ваш комментарий: Влияние анонимных функций влияет на производительность?
Ответ 2
Образец, который вы хотели бы использовать, может работать, если вы создаете closure внутри своей функции rssToTarget:
function rssToTarget(element) {
return function (xmlData) {
// work with element and the data returned from the server
}
}
function doSomething(url, elem) {
$.ajax({ type: "GET",
url: url,
dataType: "xml",
success: rssToTarget(elem)
});
}
Когда rssToTarget(elem)
выполняется, параметр элемента сохраняется в closure, и возвращается функция обратного вызова, ожидая выполняется.