我希望在通过xml文件时从$ .ajax调用外部函数,但在这种情况下我对此指针的范围感到困惑。
所以在我的ajax函数中
function getCustomerInfo (customerID) {
$.ajax ({
type: "GET",
url: "./content/customer_list.xml",
dataType:"xml",
success: function (xml) {
$(xml).find("customer[value=" + customerID + "]").each(function(){
//I want to create a function and call here to achieve the following commented code
//the commented code works fine. I just want to change it to a function because
//otherwise I have to hard code many similar lines...
// so here is the current function I call:
addCustomerDetails("timeAdded", "time_added");
// the following code works fine:
// var timeAdded = $(this).children('time_added').text();
// var lastUpdate = $(this).children('last_update').text();
// $("#time_added").html("<p>" + timeAdded + "</p>");
// $("#last_update").html("<p>" + lastUpdate + "</p>");
});
}
});
}
所以当前的addCustomerDetails函数:
function addCustomerDetails (varName, tagName) {
window[varName] = $(this).children("time_added");
$("#"+tagName).html("<p>"+window[varName]+"</p>");
}
所以我需要一个变量名作为参数,所以我使用了window [varName]。也许这也是一个问题,但我认为addCustomerDetails()中的$(this)似乎也不起作用。
我希望我已经清楚地解释了它。如果这个问题不够清楚,请发布任何问题,并真诚地感谢您的帮助!!
答案 0 :(得分:2)
function addCustomerDetails (tagName) {
var tag = $(this).children(tagName).text();
$("#" + tagName).html("<p>" + tag + "</p>");
}
并将其称为:
addCustomerDetails.call(this, "time_added");
addCustomerDetails.call(this, "last_update");
或者按照这条路径,你可以发明一些更方便使用的东西:
$(xml).find("customer[value=" + customerID + "]").each(appendTag('time_added', 'last_update'));
appendTag
的样子如下:
function appendTag() {
var tags = [].slice.call(arguments);
return function() {
for (var i = 0; i < tags.length; i++) {
var tag = $(this).children(tags[i]).text();
$("#" + tags[i]).html("<p>" + tag + "</p>");
}
};
}
答案 1 :(得分:0)
当您调用getCustomerInfo时,假设调用者可以访问addCustomerDetails,您可以在进行ajax调用之前保存对它的引用,然后使用该引用调用addCustomerDetails或将其作为调用者传递(如果已分配&#39; self& #39;没有访问权限,例如:
var self = this;
$.ajax(
....
self.addCustomerDetails(...);
);
如果addCustomerDetails不在self的上下文中,则另一个选项是:
addCustomerDetails.apply(self, ...)
对于call和apply之间的差异,您可以检查此SO线程: