jquery - 使用 jquery 从 Promise/ajax 调用返回值

标签 jquery requirejs promise deferred

var viewmodel = service.createCustomer(); 是我调用 requirejs 模块的方式。

我如何创建一个延迟对象,以便我的 createCustomer 返回在服务调用内创建的 CreateCustomerViewModel?

define(['viewmodels/CreateCustomerViewModel'],function (CreateCustomerViewModel) {

    function createCustomer() {
        $.getJSON('Customer/Create')
         .done(function (response) {
             return new CreateCustomerViewModel(response);
         })
         .fail(function (error) {
             alert(error);
         });
    }   

    return {        
        createCustomer: createCustomer        
    };
});

最佳答案

  1. 您必须使用 .then() 而不是 .done() 来修改负载。
  2. 您应该让您的 createCustomer 方法返回修改后的负载。

您的模块定义变为:

function createCustomer() {
    return $.getJSON('Customer/Create')
        .then(function (response) {
            return new CreateCustomerViewModel(response);
        });
}

return {
    createCustomer: createCustomer
};

用作:

customerCreator.createCustomer()
    .done(function (model) {
        // yay! let's use this model
    })
    .fail(function () {
        console.error("Cannot create customer");
    });

您还应该将 .fail() 处理移到外部,尽可能移到应用程序的较高位置,以便错误消息中的措辞可以有更准确的上下文。

附注作为一个吹毛求疵的人,您不应该使用 POST 请求而不是 GET 来创建实体吗?

关于jquery - 使用 jquery 从 Promise/ajax 调用返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070845/

相关文章:

javascript - 将draggable div的值与droppable input onclick事件进行比较

javascript - JS - 将相同的功能附加到许多 html 表单

javascript - 如何使用上一个/下一个按钮滑动 Owl Carousel 中的所有可见元素而不是一个

requirejs - JQuery 需要 JS 优化错误

javascript - requirejs 看不到 jquery

javascript - Require.js 甚至在 IF 语句中加载模块

javascript - promise 不等待异步对象条目 firebase 调用

jQuery 搜索结果...悬停和单击不再有效?

javascript - 函数中的返回语句

javascript - nodejs中的Redis缓存