6

我用大量数据发出请求 POST,但请求的发送需要很长时间。我说只发送因为我有这个代码:

 console.time('post load');
var req= new Array;
                req = { 
                     'data' :   $('input[name="data"]', $('#id_contain')) .serialize()
                };

var request = $.ajax({
                                    url : '/url',
                                    type : "POST",
                                     data : req,
                                    cache : false,
                timeout: 10000,
                                    dataType : 'json',
                                    async:   false,
                                    success : function(response){
                               alert('yes');
                }, 
                                    error : function(jqXHR, textStatus,
                                            errorThrown) {
                                    //  if (debug_js) {
                                            console.log(jqXHR);
                                //      }
                                    }
                                });
               console.timeEnd('post load');
  console.log('data');

所以根据这段代码,我的请求(加载后)大约需要 25 秒,而我的 onajax 请求超时 10 秒。所以我认为这只是 jquery 发出请求需要时间吗?但是,如果我用一个简单的字符串更改数据巨大的数据,它需要大约 0.01 秒......所以这真的是由于我的巨大数据吗?

4

2 回答 2

7

有完全相同的问题。在一个用例中,我必须发送 3 个 JSON 对象,总共约 20MB;虽然只发送到 localhost 大约需要 20 秒或浏览器超时(Firefox、Chrome)。

经过大量尝试和错误(也尝试注释掉所有服务器逻辑,但没有加快进程),我终于找到了解决方案:

  1. 字符串化你的 JSON 数据: JSON.stringify(req);
  2. 将 contentType: 'application/json' 添加到您的 ajax 请求
  3. 在服务器端添加逻辑以从 http-post 中读取 json 内容

3. 步骤取决于您运行的服务器类型。对我来说,它是一个带有用于 json-content 的 body-parser 模块的 node express 服务器。

在这些更改之后,jquery 的 http-post 创建时间从 20 秒下降到不到 1 秒。

于 2014-09-09T08:11:53.310 回答
1

正如 Niels 提到的,这可能是后端(服务器端)问题。我建议您先尝试注释掉服务器端的任何处理逻辑,然后立即返回您的成功条件。如果请求仍然需要很长时间,那么罪魁祸首肯定是庞大的数据,您可能必须考虑某种客户端数据压缩。此处对执行此操作的各种选项进行了一些分析。

于 2013-04-25T18:13:54.187 回答