我的数据来源:
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(),
};
}
}
...
DataServices.Securities功能:
Securities = function () {
return $.ajax({
url: "/api/securities"
});
};
如果我用简单的url字符串替换read url函数(url:" / api / securities"),则会正确添加其他数据。但是,当我按上述方式执行此操作时,我收到两个Http请求:
/api/securities
/?id=5&searchBy=3
而不是一个看起来像这样的请求:
/api/securities?id=5&searchBy=3
我能找到的唯一一个Kendo文档有一个如何使用如上所述的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的函数而不是硬编码的字符串。这就是原始问题的最重要部分是尝试做的事情。但是,数据功能的规范不起作用。在硬编码的url示例中,Kendo知道从页面获取id和searchBy并将其附加到url。但是当我使用url函数时,它无法知道如何处理相同的数据。或者这是我的猜测。
答案 0 :(得分:0)
我认为你想要做的是make transport.read
a function,因为你想手动检索数据,而不是transport.read.url
,这是用于在使用内置传输时返回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);
};