【问题标题】:Getting data returned from an AJAX request submitted to the server获取从提交给服务器的 AJAX 请求返回的数据
【发布时间】:2016-08-31 17:35:32
【问题描述】:

短版:我似乎无法处理完成 jQuery AJAX 请求后服务器返回的数据。

加长版: 我正在编写一个库存系统,主要使用 Kendo UI Grid 来处理系统中的发票。创建新发票时,我需要先创建发票,然后将行项目添加到发票并保存。我正在通过 AJAX 请求创建发票,然后使用 Kendo UI DataSource 的 create 方法添加行项目。我可以通过我的 Web API 2 控制器提交发票,并从服务器返回带有新创建对象的响应,但是如何让新创建的对象与我的网格交互?具体来说,我需要将新发票的 ID 添加到网格的每个行项目的 InvoiceID 字段中。

我已经完成了位于此处的非常明确的答案:How do I return the response from an asynchronous call? 不过,我仍然缺少一些东西,因为它对我来说还没有完全“点击”。我的代码如下:

$("#grid").kendoGrid({
        dataSource: {
            batch: false,
            transport: {
                create: { ... },
                parameterMap: function (data, operation) {
                    return JSON.stringify(data);
                }
            },
            schema: { ... }
                }
            }
        },
        toolbar: [ ... ],
        columns: [ ... ],
        save: function(e) { ... },
        saveChanges: function (e) {
            CreateInvoice().done(function (data) {
                // process invoice
            }).fail(function () {
                // display error message
            }); 
        }
    });
});

function CreateInvoice(invoice) {
    invoice = {
        ClientID: $('#IDText').text(),
        Status: 1,
        ...
    };

    $.ajax({
        url: '/api/invoice/',
        type: 'POST',
        data: JSON.stringify(invoice),
        contentType: "application/json",
    });
};

永远不会调用 .done.fail 方法。使用 Fiddler 我可以看到数据是从服务器返回的,但是我无法在 CreateInvoice() 函数或 saveChanges 函数中查看返回的数据,我不确定我做错了什么。

【问题讨论】:

    标签: javascript jquery ajax asynchronous kendo-ui


    【解决方案1】:

    你快到了!只是一个愚蠢的细节。在CreateInvoice()中需要返回ajax结果:

    function CreateInvoice(invoice) {
        invoice = {
            ClientID: $('#IDText').text(),
            Status: 1,
            ...
        };
    
        return $.ajax({
            url: '/api/invoice/',
            type: 'POST',
            data: JSON.stringify(invoice),
            contentType: "application/json",
        });
    };
    

    然后你就可以直接在函数的结果中绑定回调.done().fail(),就像你正在做的那样。

    【讨论】:

    • 太好了,谢谢!快速提问:为什么我无法检查变量中data 的内容?我实际上 确实 在那里有 return 语句,但假设它不起作用,因为我在从浏览器调试时无法检查 saveChanges 函数中的数据变量,但是当我分配它时对于 DIV,正确的值显示为文本。
    • @Nse 对不起,我不明白你的意思。您正在尝试检查data 的内容,具体在哪里?在saveChanges 内部但在done 回调外部?因为它将仅在回调中可用。
    • 也许我没有得到这个。 JavaScript 的异步特性有点令人困惑。使用done 回调我正在尝试更改网格上createurl 属性,以便可以通过网格将新创建的InvoiceID 发送到我的API,但这也不起作用。如何将新创建的 InvoiceID 获取到我的 API?
    • @Nse 你的create 怎么样?
    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2013-01-25
    • 2023-03-17
    • 2015-06-28
    相关资源
    最近更新 更多