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

我觉得我这样没法接到回电,对吧?正确的模式是什么?我不想使用全局变量来临时保存 elem或者元素名。

64370 次浏览

像这样..。

function doSomething(url, elem) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: function(xml) {
rssToTarget(xml, elem);
}
});
}

回应你的评论: 匿名函数的使用是否会影响性能?

如果在 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)时,元素参数存储在 了结中,并返回回调函数,等待执行。

那利用 Ajax 请求设置上下文呢?

function doSomething(url, elem) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: rssToTarget,
elem: elem               // <- add as settings argument
});
}


rssToTarget(ans) {
elem = this.elem;          // <- get it back using "this"
}

默认情况下,回调上下文是 $.ajaxSettings和传递给 $.ajax的设置的合并。因此,如果您在 $.ajax设置中添加字段,它们将进入回调上下文。也就是说,您可以使用 this从上下文中检索它们。