我有函数requestXML
,它进行异步调用以获取xml文件
我也有这个实现工作正常
function show(url){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, function(){
list.push($(this).text());
});
displayList(list);
});
}
但是,我希望通过这个
使函数 show 更通用function show(url, func1){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, func1(list));
displayList(list);
});
}
var func1 = function(list){
list.push($(this).text());
}
当我这样做时,我得到以下错误:“未捕获的TypeError:无法调用未定义的方法'调用'”。
我知道this
中list.push($(this).text());
的对象func
必须更改为其他内容,但我不知道是什么。我怎样才能做到这一点?
答案 0 :(得分:5)
您正在立即调用func1(list)
,然后将其返回值(undefined
,因为它没有返回语句)传递给$.each
。
$.each(items, func1(list));
相当于:
var result = func1(list); // Will be undefined
$.each(items, result);
你可以改用它:
function show(url, func1){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, $.proxy(func1, list));
displayList(list);
});
}
var func1 = function(el){
this.push($(el).text());
}
答案 1 :(得分:2)
你需要像
这样的东西function show(url, func1){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, function(idx, value){
func1.call(this, list, idx, value)
});
displayList(list);
});
}
var func1 = function(list, idx, value){
list.push($(this).text());
}
答案 2 :(得分:0)
试试这个......
function show(url, func1){
var list = [];
var func1 = function(ele){
list.push($(ele).text());
}
requestXML(url, function(xml){
var items = $(xml).find('item');
$.each(items, func1(ele));
displayList(list);
});
}