Kendo ui 剑道数据源-添加其他数据无效

Kendo ui 剑道数据源-添加其他数据无效,kendo-ui,kendo-grid,kendo-datasource,Kendo Ui,Kendo Grid,Kendo Datasource,我的数据源: var asGridDataSource = new kendo.data.DataSource({ transport: { read: { url: function (options) { DataService.Securities() .done(function (secs) { // notify t

我的数据源:

 var asGridDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: function (options) {
                DataService.Securities()
                    .done(function (secs) {
                        // notify the data source that the request succeeded
                        options.success(secs);
                    })
                    .fail(function (secs, testStatus, err) {
                        // notify the data source that the request failed
                        options.error(stats);
                    });
            },
            data: function () {
                return {
                    id: $($searchCriteria).val(),
                    searchBy: $(searchByDDL).val(), 
                };
            }
        }
        ...
以及数据服务。证券功能:

    Securities = function () {
    return $.ajax({
        url: "/api/securities"
    });
};
如果我用一个简单的url字符串(url:“/api/securities”)替换ReadURL函数,则会正确添加额外的数据。但是,当我按照上述方式执行时,我会收到两个Http请求:

/api/securities
/?id=5&searchBy=3
而不是一个应该如下所示的请求:

/api/securities?id=5&searchBy=3
我能找到的唯一一个剑道文档有一个示例,说明了如何使用如上所述的url字符串添加这样的数据,而不是在使用函数时。为什么我一个请求都没有


编辑:

在处理了这一点之后,我想我明白了。我从这个开始:

var asGridDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: "/api/securities",
            data: function () {
                return {
                    id: $($searchCriteria).val(),
                    searchBy: $(searchByDDL).val()
                };
            }
        }
     }
});

执行此操作(并且仅此操作)会产生如下请求:/api/securities?id=6&searchBy=3。我想修改上面的内容,用一个函数来代替硬编码的字符串。这就是原始问题最上面的部分试图做的事情。但是,数据函数的规范不起作用。在硬编码url示例中,Kendo知道从页面获取id和searchBy并将其附加到url。但当我使用url函数时,它无法知道如何处理相同的数据。或者这是我的猜测。

我认为您想要做的是手动检索数据,而不是使用内置传输时返回url字符串的
传输.read.url

transport: {
    read: function (options) {
        var params = {
            id: $($searchCriteria).val(),
            searchBy: $(searchByDDL).val(),
        };
        DataService.Securities(params)
            .done(function (secs) {
            // notify the data source that the request succeeded
            options.success(secs);
        })
            .fail(function (secs, testStatus, err) {
            // notify the data source that the request failed
            options.error(stats);
        });
    }
}
要将可选参数添加到
Securities
方法中,您可以执行以下操作:

DataService.Securities = function (params) {
    var options = {
        url: "/api/securities"
    };

    if (params) {
        options.data = params;
    }

    return $.ajax(options);
};

这样做,我甚至不获取查询字符串params。我得说我还以为是你干的呢。我用parameterMap而不是data尝试了这种方法,得到了相同的结果;数据方法仅在使用内置传输时有效;检查文档中的数据参数:嗯,是的,我确实想发送参数。这就是重点。能够在需要时添加它们,如此处所示,但能够在需要时使用DataService.Securities而不使用任何参数。为DataService.Securities创建可选参数,然后在通过时使用ajax调用发送它们是的,但我需要一组独立的ajax调用,它们知道证券所需的特定uri,但不需要知道其他任何事情。我们的想法是,任何应用程序都可以包括这项服务,但不会有他们永远不会使用的方法,他们只需添加数据,比如说,如果需要某种安全性,或者如果他们想要所有东西,就什么也不指定。