2

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

但是,我想通过这样做使函数显示更通用

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

当我这样做时,我收到以下错误:“未捕获的类型错误:无法调用未定义的方法'调用'”。我知道必须将in中的对象更改为其他对象this,但我不知道更改为什么。我怎样才能使这项工作?list.push($(this).text());func

4

3 回答 3

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());
}
于 2013-08-30T13:19:19.130 回答
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());
}
于 2013-08-30T13:19:37.210 回答
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);
        });
}
于 2013-08-30T13:35:39.093 回答