如何编写一个允许使用多个回调函数之一的jquery函数/框架

时间:2011-01-26 03:00:58

标签: function jquery callback

如果问题不清楚,我是一个jquery noobie,所以道歉。我一直在尝试从各个帖子中回顾一下这些回调,但是我一直在坚持它们如何组合在一起。
基本上,我目前有3个方法进行ajax调用并填充元素。一个函数的例子

function RetrieveUsers() {

        $.mobile.pageLoading(false);

        $.ajax({
            dataType: "json",
            contentType: "application/json;charset=utf-8",
            type: "POST",
            data: args,
            url: "Default.aspx/RetrieveUsers",
            success: function (d) {

                $("#userList").empty();
                var html;
                var rows = eval('(' + d.d + ')');

                for (var o in rows) {
                    var row = rows[o];
                    html += '<li>' + row.name + '</li>';
                }
                $("#userList").html(html);
                $.mobile.pageLoading(true);

            },
            error: function (x, t, e) {
                alert(x.responseText);
            }
        });

我想要做的是重新使用ajax调用功能并将行集传递回适当的方法,该方法知道如何在表单上填充所需的元素。

function SearchUsers(searchText) {
    var url = "Default.aspx/SearchUsers";
    var parameterData = '{ "searchText": "' + searchText + '" }';
    CallPageMethod(url, parameterData, DisplayUsers(userData));
}

function DisplayUsers(users)
{
    //populate the element
    var html;
    for(var user in users)
    {
        html += '<li>' + user.userName + '</li>';
    }

    $('#userList').html(html);
    $.mobile.pageLoading(true);
}

function CallPageMethod(url, paramterData, callbackFunctionWithArgs)
{
    $.mobile.pageLoading();
    $.ajax({
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        type: "POST",
        data: paramterData,
        url: url,
        success: function (d) {
            var rows = eval('(' + d.d + ')');
            callbackFunctionWithArgs(rows);


        },
        error: function (x, t, e) {
            alert(x.responseText);  //just use generic alert for now
        }
}

例如,我的任务搜索现在看起来像这样:

function SearchTasks(searchType, searchText)
{
    var url = "Default.aspx/SearchTasks";
    var parameterData = '{ "searchType": "' + searchType + '", "searchText": "' + searchText + '" }';
    CallPageMethod(url, parameterData, DisplayUsers(userData));

}

function DisplayTasks(tasks)
{
    var html;
    for(var task in tasks)
    {
        html += '<li>' + task.Status + ', ' + task.Description + '</li>';
    }

    $('#taskList').html(html);
    $.mobile.pageLoading(true);
}

任何人都能帮我理解如何连接它吗?

感谢 马特

1 个答案:

答案 0 :(得分:1)

从第一次阅读看起来很合理,但有一件事你需要记住:如果你试图传递对函数的引用,你不应该使用()或传递参数,因为这会导致调用功能。

所以,

CallPageMethod(url, parameterData, DisplayUsers(userData));

应该是:

CallPageMethod(url, parameterData, DisplayUsers);