【问题标题】:How to send a big amount of data with ajax and jquery?如何使用 ajax 和 jquery 发送大量数据?
【发布时间】:2021-03-30 09:05:50
【问题描述】:

我想使用 Ajax、php 和 Jquery 发送大量数据,并且每次都将结果添加到 div 中的数据库中。我尝试了这种方法,但是一万个请求后请求变慢了。我以前从来没有这样做过。请你能帮我优化代码吗?我也尝试上传一个 csv 文件,但是当它是一个大文件时,上传需要太多时间。

$(document).ready(function () {

    $('#clear').click(function () {
        $('#title').val('');
        $('#date').val('');
        $('#csvfile').val('');
        $('#result').empty();
        $(".loader").css('display','none');

    });

    $('#csv').on('submit',function (e) {

        e.preventDefault();
        $('.loader').css('display','inline-block');
        var title = $('#title').val();
        var date = $('#date').val();


        if(title.length == 0 ){
            $('#title').css("border","2px solid red");
        }else{
            $('#title').css("border","2px solid #bdc3c7");
        }

        if(date.length == 0 ){
            $('#date').css("border","2px solid red");
        }else{
            $('#date').css("border","2px solid #bdc3c7");
        }

        if($('#csvfile').val() == 0){
            $('#csvfile').css("border","2px solid red");
        }else{
            $('#csvfile').css("border","2px solid #bdc3c7");
            var file = document.getElementById('csvfile').files[0];

        }

        var reader = new FileReader();
        reader.readAsText(file);

        reader.onload = function(event){
            var csv = event.target.result;
            var rows = csv.split('\n');
            let data = [];

            const csvCleanUp = /("|\s"|\s)*/g;
            var headers = rows[0].split(';');

            for(var i=1;i<rows.length;i++){

                var obj = {};
                var currentline=rows[i].split(";");

                for(var j=0;j<headers.length;j++){
                    const header = String(headers[j]).replace(csvCleanUp,'');
                    const currentValue = String(currentline[j]).replace(csvCleanUp,'')
                    obj[header] = currentValue;

                }

                data.push(obj);

            }

            console.log(data);

            let nb = 1;
            let d = 0;
            var myInter = setInterval(function () {
                if(d < data.length){
                    data[d]['title'] = title;
                    data[d]['date'] = date;

                    console.log(data[d]);
                    $.ajax({
                        url: "/admin/add/action/",
                        type: "POST",
                        data: data[d],
                        cache: false,
                        dataType: "json",
                        success: function (resp) {
                            //console.log(resp.msg);
                            if(typeof resp.msg != 'undefined'){
                                $('#result').append('<span class="' + resp.color + '"> n° ' + nb + '<br>' + resp.msg + '</span>');
                            }
                            $('#result').animate({ scrollTop: $('#result')[0].scrollHeight }, 50);

                            nb++;
                        }

                    });

                    $('#clear').click(function () {
                        $('#title').val('');
                        $('#date').val('');
                        $('#csvfile').val('');
                        $('#result').empty();
                        $(".loader").css('display','none');
                        clearInterval(myInter);
                    });
                }


                if(d > data.length){
                    $(".loader").css('display','none');
                    $('#result').append('<span class="success">Fin d\'execution du script</span>');
                    clearInterval(myInter);

                }



                d++;
            },100)


        }



    });
});

【问题讨论】:

  • 什么是“大”文件...计算机不理解大文件,但它们确实理解位、字节、千字节之类的度量...我们需要更多关于您是什么文件的信息试图发送到服务器。
  • 您的请求变慢的原因可能更多地与服务器正在做的事情有关,而不是与工作站有关。对此进行优化可能几乎没有什么不同。无论如何,最快的方法是上传文件并让服务器处理这一切。为什么这对你不起作用?
  • 该文件是一个 10 Mo 文件,我尝试使用 ajax 上传它,但上传大约需要 3 分钟。我已经为大文件上传配置了 php.ini。
  • 我想我在这里找到了我的解决方案stackoverflow.com/questions/40367082/…

标签: php jquery ajax csv


【解决方案1】:

这是我使用的另一种方法:

$(document).ready(function () {

    $('#clear').click(function () {
        $('#title').val('');
        $('#date').val('');
        $('#csvfile').val('');
        $('#result').empty();
        $(".loader").css('display','none');

    });

    $('#csv').on('submit',function (e) {

        e.preventDefault();
        $('.loader').css('display','inline-block');
        var title = $('#title').val();
        var date = $('#date').val();


        if(title.length == 0 ){
            $('#title').css("border","2px solid red");
        }else{
            $('#title').css("border","2px solid #bdc3c7");
        }

        if(date.length == 0 ){
            $('#date').css("border","2px solid red");
        }else{
            $('#date').css("border","2px solid #bdc3c7");
        }

        if($('#csvfile').val() == 0){
            $('#csvfile').css("border","2px solid red");
        }else{
            $('#csvfile').css("border","2px solid #bdc3c7");
            var file = document.getElementById('csvfile').files[0];

        }

        var data = new FormData(this);

        $.ajax({
            url: "/admin/add/v2/action/",
            type: "POST",
            data: data,
            contentType: false,
            cache: false,
            processData:false,
            success: function (resp) {
               

            }


    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多