Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kendo ui Kendo从远程服务获取数据,在本地进行分页_Kendo Ui_Kendo Datasource - Fatal编程技术网

Kendo ui Kendo从远程服务获取数据,在本地进行分页

Kendo ui Kendo从远程服务获取数据,在本地进行分页,kendo-ui,kendo-datasource,Kendo Ui,Kendo Datasource,代码: var url=base\u url+“/api/v1/users/getUsers”; var dataSource=new kendo.data.dataSource({ 运输:{ 阅读:功能(选项){ $.ajax({ 键入:“GET”, url:url, 数据类型:“json”, 数据:{searchTerm:$(“#searchTerm”).val().trim()}, 成功:功能(结果){ 选项。成功(结果); }, 错误:函数(结果){ 选项。错误(结果); } }); }

代码:

var url=base\u url+“/api/v1/users/getUsers”;
var dataSource=new kendo.data.dataSource({
运输:{
阅读:功能(选项){
$.ajax({
键入:“GET”,
url:url,
数据类型:“json”,
数据:{searchTerm:$(“#searchTerm”).val().trim()},
成功:功能(结果){
选项。成功(结果);
},
错误:函数(结果){
选项。错误(结果);
}
});
}
},
模式:{
数据:功能(结果){
返回结果.model;
},
总计:功能(结果){
返回result.model.length;
},
},
页面大小:5
});
$(“#匹配”).kendoListView({
数据源:数据源,
autoBind:false,//如果设置为false,则小部件在初始化期间不会绑定到数据源。
模板:kendo.template($(“#matchesListViewTemplate”).html()
});
$(“#寻呼机”).kendoPager({
数据源:数据源,
自动绑定:错误
});
$(文档)。按键(功能(e){
如果(e.which==13){
e、 预防默认值();
var searchTerm=$(“#searchTerm”).val().trim();
如果(searchTerm.length<1)
回来
dataSource.read();
dataSource.page(1);//再次调用远程服务
}
});
因为数据源是远程的,所以当我们调用dataSource.page(1)时,kendo向远程服务发出另一个调用。此行为描述如下:

如果您正在执行服务器端分页,那么执行grid.dataSource.page(1)就足够了,因为这将完全按照您已经实现的方式调用读取

我必须更改什么,以便在使用新的searchTerm搜索后,API调用只执行一次,pager将转到第1页而不进行另一次调用


我尝试了dataSource.query(),但还是没有成功?我希望我已经做了足够的演示。

解决方案是在dataSource.read()获取数据/完成时调用dataSource.page(1)

var url = base_url + "/api/v1/users/getUsers";
var dataSource = new kendo.data.DataSource({
  transport: {
    read: function (options) {
      $.ajax({
          type: 'GET',
          url:url,
          dataType: 'json',
          data: { searchTerm: $("#searchTerm").val().trim() },
          success: function (result) {
          options.success(result);
        },
        error: function (result) {            
          options.error(result);
        }
      });
    }
  },
  schema: {
    data: function (result) {
     return result.model;
    },
    total: function (result) {
      return result.model.length;
    },
  },
  pageSize: 5
});

$("#matches").kendoListView({
  dataSource: dataSource,
  autoBind: false, // if set to false the widget will not bind to the data source during initialization.
  template: kendo.template($("#matchesListViewTemplate").html())
});

$("#pager").kendoPager({
  dataSource: dataSource,
  autoBind: false
});

$(document).keypress(function (e) {
  if (e.which == 13) {
    e.preventDefault();      

    var searchTerm = $("#searchTerm").val().trim();
    if (searchTerm.length < 1)
      return;

    dataSource.read(); 
    dataSource.page(1); // makes another call to the remote service
  }
});
$(文档)。按键(功能(e){
如果(e.which==13){
e、 预防默认值();
var searchTerm=$(“#searchTerm”).val().trim();
如果(searchTerm.length<1)
回来
dataSource.read().done(函数()){
//如果远程服务返回空结果集(但仍然是http 200代码)
//page()发出另一个请求(如果data()为空,则发出另一个请求)
//因此,我们必须检查数据长度/总长度
如果(dataSource.total()>0)
数据源。第(1)页;
}
});
如果读取请求的响应尚未到达或发生错误,则允许另一个读取请求(以获取数据)。DataSource.read()异步发出请求,然后DataSource.page(1)开始执行。DataSource.page(1)函数检查是否有任何数据读取,如果没有,它将再次执行读取方法-因此,正如您所提到的,我们得到了两个调用。由于异步调用,这种情况可能会发生

$(document).keypress(function (e) {
  if (e.which == 13) {
    e.preventDefault();      

    var searchTerm = $("#searchTerm").val().trim();
    if (searchTerm.length < 1)
      return;

    dataSource.read().done(function() {

      // in case remote service returns empty result set (but still http 200 code)
      // page() makes another request (if data() is empty it makes another request)
      // therefore we must check data length/total
      if( dataSource.total() > 0)
        dataSource.page(1);
    }
});