将大量客户端数据传递到服务器的最佳做法是什么?

时间:2011-10-14 22:25:41

标签: jquery client-side-data

我在客户端有很多数据,主要由大型数组组成,我需要将这些信息反馈给服务器,并能够轻松解析它。我在前端使用jQuery,在后端使用PHP(CodeIgniter)。

现在我只是使用jQuery $ .post发布一个巨大的数组。这是一个好主意还是应该使用几个较小的?

另外,我应该使用jQuery的ajax方法还是有更好的东西?

5 个答案:

答案 0 :(得分:2)

最大帖子大小将由服务器的PHP.INI文件中的post_max_size设置控制。默认设置为8MB,这是发布数据的大量空间。请记住,可能还有其他因素影响该限制(memory_limit等)。

简而言之,如果你的1000个元素的大小非常小,那么使用jQuery的常规帖子可能是一个合适的方法。

答案 1 :(得分:1)

如果您可以将所有数据合并到一个帖子中,那肯定是要走的路。浏览器,尤其是IE(gag),当你同时向同一台服务器发送过多的同时XHRequests时,它们会窒息。一次太多通常意味着超过2个。

基本上,将数据发送到服务器的最佳做法可归纳为:“在尽可能少的请求中尽可能少”。你如何构建数据取决于你。

如果您真的通过jQuery发送了很多内容,请考虑使用jsend(一个jQuery插件进行压缩,使用PHP副本进行解压缩)来压缩它。

答案 2 :(得分:1)

也许您可以在将数据发送到服务器之前尝试对其进行压缩。 看看这个主题:JavaScript implementation of Gzip

答案 3 :(得分:0)

Darin在这里回答了类似的问题:Sending large data to server

使用POST HTTP谓词代替GET:

$.ajax({
    url: '/foo',
    type: 'POST',
    data: { value: someVariableThatCouldBeHuge },
    success: function(result) {
        // TODO: process the results
    }
});

或等同物:

$.post('/foo', { value: someVariableThatCouldBeHuge }, function(result) {
    // TODO: process the results
});

如果帖子不是一个选项,Pekka建议序列化数据并分成块:Sending a large parametrized data set as a GET request

答案 4 :(得分:0)

您可以使用FormData:

var formData = new FormData();
formData.append('filename', filename);
formData.append('data', data);
$.ajax({
    url: "FileUploadServlet",
    type: "POST",
    data: formData,
    cache: false,
    contentType: false,
    processData: false});