限制jQuery的完整结果
上面的代码工作正常,但没有限制数据,它包含数千行,但我想将其限制为最多10或20行。我正在尝试,但失败了。如果无法限制api发送的结果,可以使用for循环,而不是像这样的映射限制jQuery的完整结果,jquery,jquery-ui-autocomplete,Jquery,Jquery Ui Autocomplete,上面的代码工作正常,但没有限制数据,它包含数千行,但我想将其限制为最多10或20行。我正在尝试,但失败了。如果无法限制api发送的结果,可以使用for循环,而不是像这样的映射 $("#search_customer").autocomplete({ source: function (request, response) { $.ajax({ url: "<?php echo base_url(); ?>" + "sales/
$("#search_customer").autocomplete({
source: function (request, response) {
$.ajax({
url: "<?php echo base_url(); ?>" + "sales/get_customers",
type: 'GET',
data:request,
success: function (data) {
var object = JSON.parse(data);
if(object.length!=0){
$("#add_customer_div").hide();
response($.map(object, function (el) {
return {
label: el.phone,
value: el.name,
id: el.CustomerID
};
}));
}else{
// $("#add_customer_div").show();
}
}
});
},
select: function (event, ui) {
this.value = ui.item.label;
$(".ui-menu-item").hide();
event.preventDefault();
}
});
您可以对对象进行切片,使其仅包含10-20项,下面是您的成功回调,在对象上应用了一个简单的切片,其余代码与您编写的相同。这并没有利用像上面这样的循环
var result=[];
if(object.length!=0){
for(i=0;i<limit;i++){
result.push(object[i])
}
}
$("#add_customer_div").hide();
response($.map(result, function (el) {
return {
label: el.phone,
value: el.name,
id: el.CustomerID
};
}));
但是,如果您能够更有效地控制服务器,则可以创建一个只返回10-20项的端点,这将节省您传输所有未使用的数据的时间。要在ajax请求中发送限制,请执行以下操作:
success: function(data) {
var object = JSON.parse(data);
if (object.length != 0) {
$("#add_customer_div").hide();
object = object.slice(0, 10)
response($.map(object, function(el) {
return {
label: el.phone,
value: el.name,
id: el.CustomerID
};
}));
} else {
// $("#add_customer_div").show();
}
}
然后在PHP资源中:
var limit = 20; // the amount you wish.
$.ajax({
url: "<?php echo base_url(); ?>" + "sales/get_customers" + "?n="+limit,
//...
请注意,您不应该像本例一样使用$n变量。
您应该使用mysqli或PDO参数化查询。。。避免SQL注入。
但这完全超出了您的问题范围。您可以调整资源以只返回您想要的数字吗?您必须在get_customers页面上应用限制,然后您可以添加一个参数,如sales/get_customers?pageSize=n,您需要在get_customers中根据n的值处理该参数。@VenkatLokeswar您是指服务器端吗标页码如果我必须进行服务器端分页,那么我如何判断预期结果包含的内容???您需要基于n值编写查询,以便跟踪应该发送到前端的数据。这是一个正确的快速修复。。。但是每一个请求都会传输数千行。限制服务器端可以使请求更快。@Louys这就是为什么我说如果你不能限制APIs上的结果,这也是正确的逻辑bt它的一点长度方法,暂时给出正确的回答,但无论如何,非常感谢!
<?php
$default_n = 10; // a default value in case of omission.
if(isset($_GET['n'])){
$n = $_GET['n'];
}else{
$n = $default_n;
}
// Use this $n in the SQL statement.
// Example:
$sql = "SELECT * FROM table WHERE somecolumn='SomeValue' limit $n";
// ...