我开始使用的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)
});
}
我认为我不能让回调以这种方式工作,对吗?什么是正确的模式?我不想使用全局变量来暂时保留elem
或elem名称。
答案 0 :(得分:94)
喜欢这个......
function doSomething(url, elem) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: function(xml) {
rssToTarget(xml, elem);
}
});
}
答案 1 :(得分:30)
如果在rssToTarget函数中创建closure,则您希望使用的模式可以使用:
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中,并返回回调函数,等待执行。