JQuery ajax xhr 100%完成前开始
JQuery ajax xhr 100% complete before start?
我有一个很长的脚本,可能需要几分钟才能执行,所以我决定创建一个进度条,它将返回当前状态。
但是我有问题,因为xhr event .loaded/evt。Total(30/30)在开始执行长脚本之前返回1(100%)…
$(".systemform").live("submit",function(e) { //run system
run_system(); //start run system
e.preventDefault();
});
function run_system(){
$("#leftcontainer").html("");
$("#leftcontainer").show();
$("#chartContainer").hide();
$(".loading").show();
var sysid = $(".sysid:checked").val();
var oddstype = $(".odds_pref").val();
var bettypeodds = $(".bet_type_odds").val();
var bookie = $(".bookie_pref").val();
if (typeof oddstype === "undefined") {
var oddstype = $(".odds_pref_run").val();
var bettypeodds = $(".bet_type_odds_run").val();
var bookie = $(".bookie_pref_run").val();
}
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete);
$('.progress').css({
width: percentComplete * 100 + '%'
});
if (percentComplete === 1) {
$('.progress').addClass('hide');
}
}
}, false);
xhr.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete);
$('.progress').css({
width: percentComplete * 100 + '%'
});
}
}, false);
return xhr;
},
type: "POST",
url: '/index.php?/system/system_options/left/'+'1X2/'+oddstype+'/'+bettypeodds+'/'+bookie,
data: {
system : sysid,
showpublicbet : showpublicbet
}, // serializes the form's elements.
dataType:"json",
success: function(data)
{
console.log(data);
$("#systemlist").load('/index.php?/system/refresh_system/'+sysid,function(e){
systemradiotocheck();
});
$("#resultcontainer").load('/index.php?/system/showresults/'+sysid+'/false');
$("#resultcontainer").show();
$("#leftcontainer").html(data.historic_table);
$("#rightcontainer").html(data.upcoming_table);
var count = 0;
var arr = [];
$("#rightrows > table > tbody > tr").each(function(){
var row = $(this).data('row');
if(typeof row !== 'undefined'){
var rowarr = JSON.parse(JSON.stringify(row));
arr[count] = rowarr;
$(this).find('td').each(function(){
var cell = $(this).data('cell');
if(typeof cell !== 'undefined'){
var cellarr = JSON.parse(JSON.stringify(cell));
arr[count][6] = cellarr[0];
}
});
count ++;
}
});
if(oddstype == "EU" && bookie == "Bet365"){
$('.bet365').show();
$('.pinnacle').hide();
$('.ukodds').hide();
}
if(oddstype == "EU" && bookie == "Pinnacle"){
$('.pinnacle').show();
$('.bet365').hide();
$('.ukodds').hide();
}
if(oddstype == "UK"){
$('.bet365').hide();
$('.pinnacle').hide();
$('.ukodds').show();
}
if(bookie == "Pinnacle"){
$(".pref-uk").hide();
}
else{
$(".pref-uk").show();
}
$(".loading").hide();
runned = true;
var options = {
animationEnabled: true,
toolTip:{
content: "#{x} {b} {a} {c} {y}"
},
axisX:{
title: "Number of Games"
},
axisY:{
title: "Cumulative Profit"
},
data: [
{
name: [],
type: "splineArea", //change it to line, area, column, pie, etc
color: "rgba(54,158,173,.7)",
dataPoints: []
}
]
};
//console.log(data);
var profitstr = 0;
var parsed = $.parseJSON(JSON.stringify(data.export_array.sort(custom_sort)));
var counter = 0;
for (var i in parsed)
{
profitstr = profitstr + parsed[i]['Profit'];
//console.log(profitstr);
var profit = parseFloat(profitstr.toString().replace(',','.'));
//console.log(profit);
var event = parsed[i]['Event'].toString();
var hgoals = parsed[i]['Home Goals'].toString();
var agoals = parsed[i]['Away Goals'].toString();
var result = hgoals + ":" + agoals;
var date = parsed[i]['Date'].toString();
var bettype = parsed[i]['Bet Type'];
var beton = parsed[i]['Bet On'];
var handicap = parsed[i]['Handicap'];
counter++;
options.data[0].dataPoints.push({x: counter,y: profit,a:event,b:date,c:result});
}
$("#chartContainer").show();
$("#chartContainer").CanvasJSChart(options);
$(".hidden_data").val(JSON.stringify(data.export_array));
$(".exportsys").removeAttr("disabled");
$(".exportsys").removeAttr("title");
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
}
});
}
这里有什么问题?
当我执行console.log(evt)时,我得到这个:从上传进度:
ProgressEvent {istrust: true, lengthComputable: true, loaded: 30;合计:30,类型:"progress"…}
from download progress:
system:302 ProgressEvent {itrusted: true, lengthComputable: false,load: 28987, total: 0, type: "progress"…}system:302 ProgressEvent .{itrusted: true, lengthComputable: false, loaded: 104950, total: 0,类型:"进步"…}
它看起来太大了,我的解决方案是什么??
我解决它通过JQuery直接访问文件,而不是php使用$.get:
function refreshProgress(){
$.get('1_run.txt', function(data) {
console.log(data);
});
}
ajax XHR函数替换
xhr: function ()
{
var xhr = new window.XMLHttpRequest();
//Upload progress
$("#loadAdd").show();
xhr.upload.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = (evt.loaded / evt.total) * 100;
$('#loadAdd .progress-bar').css('width', percentComplete + '%');
}
}, false);
//Download progress
xhr.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
}
}, false);
return xhr;
},
html代码
<div class="col-lg-12">
<div id="loadAdd" class="progress progress-striped active">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 00%">
</div>
</div>
</div>
相关文章:
- 如何添加类,同时开始在文本字段中输入文本
- 希望日期开始结束于while循环中的一个房间id的一个数组
- ng模型内的ng重复的ng重复开始
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- Yii2从点击链接开始加载模式
- Jquery幻灯片以一行左侧的图像开始,但我希望它从右端开始
- 从REST服务器和Coffeescapet前端开始
- nodejs createReadStream从第n行开始
- 有没有写100以上的索引的捷径
- 处理第三方库发送的ajax请求的开始和结束事件
- 从头开始创建XLS文件
- 宽度为100%的CSS元素位于视口之外
- 在开始时隐藏FX.slide内容,而不是在单击后隐藏
- 拖动开始时更改可拖动元素的大小
- jQuery Datepicker从日期开始设置默认值
- 水平视差滚动从头开始-没有插件(jQuery)
- 如何在jQuery Mobile中设置100%宽度的输入类型日期
- 是否有可能通过跳过前 100 帧来使 SWIFFY 对象开始播放
- 开始0透明度和onClick设置不透明度为100
- JQuery ajax xhr 100%完成前开始