Kendo-UI DataSource.read() 并不总是发出 GET 请求
Kendo-UI DataSource.read() not always making a GET request
我确实有一个 kendo 数据源,它填充了一个 kendo 模板。
var remoteTemplate = kendo.template($("#remotetemplate").html(), {
useWithBlock: false });
var remoteDatasource = new kendo.data.DataSource({
transport: {
read: {
url: 'Home/RemoteData',
}
},
change: function () {
$("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
}
});
当我们调用读取方法remoteDatasource.read()
时,向Home/RemoteData发出了GET请求
再读一次,向 Home/RemoteData 发出另一个请求
我知道这不好,但我试图理解这一点 :-)
remoteDatasource.read()
到目前为止一切顺利,但是我再次调用 read() 时,GET 请求是
没有发生。这是为什么? remoteDatasource.read()
无论我调用多少次这里都没有Get请求
我还注意到 fetch()
方法有相同的行为。
谁能解释一下为什么会这样?还有读取和获取之间的区别是什么。
read()方法应该每次都请求远程服务。
fetch()方法只在第一次请求远程服务。
您的特定 read() 可能不会请求远程服务,因为它正在缓存。您可以尝试将您的请求作为 POST 还是将 transport.read.cache 中的配置设置为 false?
http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-transport.read.cache
您的 change
回调或任何其他 Javascript 是否抛出异常?尝试删除 change
处理函数。我在过去看到过一些问题,如果在 DataSource
尝试处理服务器响应时抛出未捕获的异常,那么数据源将处于一种状态,它认为先前的请求仍然是 运行(因为它由于错误而从未完成)并且不会执行另一个请求。
似乎优化了行为 Kendo 如果您在连续的行中调用 datasource.read() 则将调用次数限制为两次。这是公平的,因为在实际情况下不需要有这样的代码。
这是我写的两种代码。
场景 1:调用 datasource.read() 以响应按钮点击。
$("#remoteRequestBtn").click(function () {
var remoteTemplate = kendo.template($("#remotetemplate").html(), { useWithBlock: false });
var remoteDatasource = new kendo.data.DataSource({
transport: {
read: {
cache: false,
url: 'Home/RemoteData',
}
},
change: function () {
$("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
}
});
remoteDatasource.read();
});
结果:每当我单击按钮时,都会向网络调用 Get 请求 api。
场景 2:调用多个 datasource.read() 以响应按钮点击。
$("#remoteRequestBtn").click(function () {
var remoteTemplate = kendo.template($("#remotetemplate").html(), { useWithBlock: false });
var remoteDatasource = new kendo.data.DataSource({
transport: {
read: {
cache: true,
url: 'Home/RemoteData',
}
},
change: function () {
$("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
}
});
remoteDatasource.read();
remoteDatasource.read();
remoteDatasource.read();
remoteDatasource.read();
});
注意:我调用了 read 方法 4 次,现在如果你问我这是否有效 :-) 不是 :-)
结果:在这种情况下,我只收到两个 GET 请求(对于第一个和第二个 read(),其余的读取被忽略)
到目前为止,我想将此视为 Kendo-UI 方面的优化,除非有人回来纠正它。
特别感谢 JFlok 和 CodingWithSpike 给予正确的指导。
我确实有一个 kendo 数据源,它填充了一个 kendo 模板。
var remoteTemplate = kendo.template($("#remotetemplate").html(), {
useWithBlock: false });
var remoteDatasource = new kendo.data.DataSource({
transport: {
read: {
url: 'Home/RemoteData',
}
},
change: function () {
$("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
}
});
当我们调用读取方法remoteDatasource.read()
再读一次,向 Home/RemoteData 发出另一个请求
我知道这不好,但我试图理解这一点 :-)
remoteDatasource.read()
到目前为止一切顺利,但是我再次调用 read() 时,GET 请求是
没有发生。这是为什么? remoteDatasource.read()
无论我调用多少次这里都没有Get请求
我还注意到 fetch()
方法有相同的行为。
谁能解释一下为什么会这样?还有读取和获取之间的区别是什么。
read()方法应该每次都请求远程服务。
fetch()方法只在第一次请求远程服务。
您的特定 read() 可能不会请求远程服务,因为它正在缓存。您可以尝试将您的请求作为 POST 还是将 transport.read.cache 中的配置设置为 false?
http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-transport.read.cache
您的 change
回调或任何其他 Javascript 是否抛出异常?尝试删除 change
处理函数。我在过去看到过一些问题,如果在 DataSource
尝试处理服务器响应时抛出未捕获的异常,那么数据源将处于一种状态,它认为先前的请求仍然是 运行(因为它由于错误而从未完成)并且不会执行另一个请求。
似乎优化了行为 Kendo 如果您在连续的行中调用 datasource.read() 则将调用次数限制为两次。这是公平的,因为在实际情况下不需要有这样的代码。
这是我写的两种代码。
场景 1:调用 datasource.read() 以响应按钮点击。
$("#remoteRequestBtn").click(function () {
var remoteTemplate = kendo.template($("#remotetemplate").html(), { useWithBlock: false });
var remoteDatasource = new kendo.data.DataSource({
transport: {
read: {
cache: false,
url: 'Home/RemoteData',
}
},
change: function () {
$("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
}
});
remoteDatasource.read();
});
结果:每当我单击按钮时,都会向网络调用 Get 请求 api。
场景 2:调用多个 datasource.read() 以响应按钮点击。
$("#remoteRequestBtn").click(function () {
var remoteTemplate = kendo.template($("#remotetemplate").html(), { useWithBlock: false });
var remoteDatasource = new kendo.data.DataSource({
transport: {
read: {
cache: true,
url: 'Home/RemoteData',
}
},
change: function () {
$("#remotemovies tbody").html(kendo.render(remoteTemplate, this.view()));
}
});
remoteDatasource.read();
remoteDatasource.read();
remoteDatasource.read();
remoteDatasource.read();
});
注意:我调用了 read 方法 4 次,现在如果你问我这是否有效 :-) 不是 :-)
结果:在这种情况下,我只收到两个 GET 请求(对于第一个和第二个 read(),其余的读取被忽略)
到目前为止,我想将此视为 Kendo-UI 方面的优化,除非有人回来纠正它。
特别感谢 JFlok 和 CodingWithSpike 给予正确的指导。