jQuery post调用导致“无法加载资源:net :: ERR_INSUFFICIENT_RESOURCES”

时间:2014-04-18 19:50:59

标签: jquery post

我有一个页面,允许用户上传和映射CSV文件。完成此操作后,行将通过post调用发送到另一台服务器上的页面。经过近6,00次调用(确切地说是5787)后,我开始收到“无法加载资源:net :: ERR_INSUFFICIENT_RESOURCES”的控制台错误。

我已经尝试在CSV文件中运行100行的页面,它运行得很好......但是当我尝试了一个大型列表(超过10,000行)时,它就冻结了。

以下是发布帖子的代码:

for (var i = 0; i < manifestRows.length; i++)
{
    $.post('http://www.otherserver.com/subfolder/handler.php', { tblName: 'foobar', thing1: manifestRows[i][0], thing2: manifestRows[i][1], thing3: manifestRows[i][2], thing4: manifestRows[i][3], thing5: manifestRows[i][4], thing6: manifestRows[i][5], thing7: manifestRows[i][6], thing8: manifestRows[i][7], thing9: manifestRows[i][8], thing10: manifestRows[i][9], thing11: manifestRows[i][10], thing12: manifestRows[i][11], thing13: manifestRows[i][12], thing14: manifestRows[i][13], thing15: manifestRows[i][14], thing16: manifestRows[i][15], thing17: manifestRows[i][16], thing18: manifestRows[i][17] }, function(data) {
    if (data.length == 0)
    {
        var currentProcessing = $('#processingCurrent').html();
        $('#processingCurrent').html(parseInt(currentProcessing) + 1);
        var progress = Math.ceil((parseInt(currentProcessing) / manifestRows.length) * 100);
        if (progress == 99)
            progress = 100;
        progress = progress + '%'
        $("#progressBar").width(progress).html(progress);
        if (progress == '100%')
        {
            $('#processdingDiv').hide();
            $('#allDone').show();
        }
    }
    else
        alert(data);
    });
}

我可以在用户端或其他服务器上放置一些代码以防止发生此Insuffiecient Resource错误吗?

1 个答案:

答案 0 :(得分:2)

我在AngularJS应用程序中几乎完全相同的错误。我必须做的是批量请求。批号与您的实例相关,但我一次使用1,000个调用。

由于很多这种情况是异步发生的,我不得不创建两个变量。 httpRequestsExpected应与批量大小相同,具体取决于您的代码。在我的每次调用$http.$get();时,我只是递增它以获得确切的值。

var batchSize = 1000;
var httpRequestsExpected;
var httpRequestsMade = 0;

然后在http 成功和错误函数中,增加httpRequestMade

要解决批处理问题,并且由于http有时会挂起,我无法完成匹配,如: if(httpRequestsMade === httpRequestsExpected)
但不得不像这样填充:
if(httpRequestsMade >== httpRequestsExpected - (httpRequestsExpected *0.01))

然后启动下一批,将起始指针递增batchSize并重置变量。这提供了一个安全的缓冲量和完成过程的时间,而不消耗所有资源。