如何使用jQuery.ajax时限制/指定JSON响应

7

我最近才开始使用jQuery中的ajax技术。我想知道是否可以限制或指定从响应中返回的内容。

比如说,如果我有以下数据,我只想获取其中的前3个人或后3个人(共100个人)。

$.ajax({
   type: "GET",
   url: "/people"
   dataType: "json",
   success: function(data) {
      // Do some awesome stuff.
   }
});

现在,我知道你可以传递一个可选的数据对象。这个数据对象能被用来限制或指定我想要的响应吗?

感谢任何帮助!


你不想在服务器端添加一个参数(例如/people?5)来限制输出吗? - r_31415
6个回答

10

你应该在服务器端进行筛选。使用data传递参数。

$.ajax({
   type: "GET",
   url: "/people",
   data: {limit: 3, order: 'desc'}, 
   dataType: "json",
   success: function(data) {
      // Do some awesome stuff.
   }
});

然后在服务器端,根据 limitorder 返回响应。


非常感谢您的回答。我正在开发一个小型的Rails应用程序,所以我肯定会在服务器端进行过滤。我还在使用rabl。我相信这应该不是问题。 - Mike Bonds

3

是的,您可以使用“data”参数将参数传回服务器,以指示要返回哪些记录。我通常在分页时这样做,以获取第1-10行或第21-30行。这需要您的服务器逻辑理解从参数值中它需要返回正确数量的数据。如果您无法控制它(服务器总是向您发送100条记录),则在成功处理程序中,您将手动提取所需的3条记录。

$.ajax({
 type: "GET",
 url: "/people"
 dataType: "json",
 data: {
   minRow: 1,
   maxRow: 10
 },
 success: function(data) {
    // Do some awesome stuff.
 }
});

2

如果您选择在客户端执行此操作:

成功回调的第一个参数是从服务器返回的数据。

由于您期望从服务器返回的数据类型为JSON,因此将返回JavaScript对象。您可以像通常在JavaScript中做的那样访问前三个或后三个人。

例如,如果来自服务器的响应如下所示:

{ 
    "people" : [
        { name: "Foo" },
        { name: "Bar" },
        { name: "Baz" },
        // and so on...
    ]
} 

您可以这样访问前三个或后三个人:
$.ajax({
   type: "GET",
   url: "/people"
   dataType: "json",
   success: function(data) {
      // Assuming there are 100 people in the "people" array
      // The first three people 
      console.log( data.people[0] ); // "Foo"
      console.log( data.people[1] ); // "Bar"
      console.log( data.people[2] ); // "Baz"

   } 
});

谢谢你的帮助,但我肯定会在服务器上进行任何过滤。在我发帖之前,我考虑过采用你发布的方法,但我认为这样做不太好。 - Mike Bonds

2

如果响应类型为JSON,则需要在服务器端限制结果,可以使用for循环使其停止在第三个结果。我个人会选择在服务器端进行处理,因为这样可以减少响应大小。


1

如果我理解得没错的话......

通常我会在ajax请求中发送数据。在你的情况下,我会发送这个:

 url:'addres'
 data: 'from='+value_from+'&to='+to;
 type:'post'

在服务器端,您可以获取从和到的内容,或者类似于此的其他选项(如果需要金额等),并响应您想要的结果。

0

我完全同意@xdazz的答案,但如果您使用外部资源并且无法访问服务器端脚本,则可以采用此方法,这对我的解决方案非常有效。在您的for循环中添加以下内容:

for (var i = 0; i < 5 && i < response.data; i++) {

//Response is limited to five. 
//example: 
var items = response[i].data.items

};

这是一种有点过时的方法,但它有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接