4

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

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

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

4

5 回答 5

2

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

简而言之,如果您的 1000 个元素的大小非常小,那么使用 jQuery 进行常规发布可能是一种足够的方法。

于 2011-10-14T22:37:49.013 回答
1

Maybe you could try to ZIP your data, before sending it to the server. Check out this thread: JavaScript implementation of Gzip

于 2011-10-14T22:59:10.727 回答
1

如果您可以将所有数据合并到一篇文章中,那绝对是要走的路。浏览器,尤其是 IE (gag),当您超过同一服务器的太多同时 XHRequest 时,将会阻塞。一次太多通常意味着超过 2 个。

基本上,将数据发送到服务器的最佳实践可以总结为:“尽可能少地请求尽可能少的请求”。如何构建数据取决于您。

如果您确实通过 jQuery 发送了很多内容,请考虑使用jsend(用于压缩的 jQuery 插件,用于解压缩的 PHP 对应物)之类的东西对其进行压缩。

于 2011-10-14T22:43:06.337 回答
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
});

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

于 2011-10-14T22:42:31.120 回答
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});
于 2013-04-18T09:33:46.037 回答