【问题标题】:Understanding jQuery Deferred.pipe()了解 jQuery Deferred.pipe()
【发布时间】:2011-08-20 17:55:51
【问题描述】:

我正在尝试为以下场景实现 jQuery Deferred.pipe() 方法:

  1. 通过 $.ajax() 在 DB 中添加用户
  2. 无论用户是否正确添加,都会得到响应。
  3. 如果添加成功,通过$.ajax()从服务器获取所有用户列表
  4. 通过 jQuery 模板显示列表

这是我尝试过的:

var addUserSuccess = function( data ) {
    if ( data.returnCode !== "success" ) {
        return $.Deferred().reject('Error saving user');
    }
    getUsers();
}

var addUser = function() {
    return $.ajax(url, {
        type: "POST",
        data: { username: 'test' },
        contentType: "application/json",
        dataType: "json"
    });
}

var displayUsers = function( data ) {
    $('#myTmpl').tmpl(data.d).appendTo('#myDiv');
}

var getUsers = function () {
    return $.ajax(url, {
        type: "GET",
        data: {},
        contentType: "application/json",
        dataType: "json"
    });
}

$.when(addUser()).pipe(addUserSuccess).then(displayUsers)

但这不起作用。我知道有什么遗漏或错误。有什么帮助吗?

【问题讨论】:

    标签: jquery deferred-execution deferred-loading


    【解决方案1】:

    在 addUsersSuccess 中,您应该返回 getUsers。这是一个简单的错字,您的主要思想完全正确,并且正在使用管道,并且很好:)

    【讨论】:

    • 感谢您对代码的回复和确认。但是,只是想确认一下,我们能否以链式方式调用此代码,在这种方式下,我们可以将所有请求和回调链接在一个语句中。类似:$.when(ajaxreq1).pipe(ajaxreq2).then(successcallback1).then(successcallback2) 这样我们就可以从一条语句中了解所有请求和回调。
    • @Ashish:是的,Promises 和 Deferreds 是完全可链接的。您可以事件 $.when(...).pipe(...).done(cb1).pipe(...).done(cb2),一切皆有可能 ;)
    • 我尝试过类似http://jsfiddle.net/8AtbP/2/ 的方法。但不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多