【发布时间】: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/…