Ich habe zwei Ajax Anrufe. Der erste Aufruf besteht darin, eine Datei zu lesen und sie in der Datenbank (mysql) zu speichern, und am Ende einer for-Schleife setzen sie eine Sitzungsvariable des "Status" wie das Intervall. Der zweite Aufruf gibt die Sitzungsvariable zurück.Ajax Anrufe nicht parallel
das ist mein Javascript-Code:
var interval = null;
function test(data) {
var i = 0;
interval = setInterval(function() {
$.ajax({
url: '/admin/movies/progress',
type: "GET",
async: true,
dataType: "text",
success: function (data) {
console.log(data);
$('#saveFileProgressBar').width(data[0]);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
toastr.error('error progressbar', 'Download File');
}
});
i++;
if(i == 5){
clearInterval(interval);
}
}, 500);
$.ajax({
url: '/admin/movies/1',
type: "GET",
async: true,
dataType: "text",
success: function (data) {
console.log(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
toastr.error('error', 'Download File');
}
});
}
dies mein Laravel 5,4 Code:
// Mapped to mysite.com/admin/movies/progress
public function getProgress() {
return Response::json(array(Session::get('progress')));
}
// Mapped to mysite.com/admin/movies/1
public function postGenerate() {
// getting values from form (like $record_num)
Session::put('progress', 0);
Session::save(); // Remember to call save()
for ($i = 1; $i < 100; $i++) {
sleep(1);
Session::put('progress', $i);
Session::save(); // Remember to call save()
}
return "done";
}
/////// EDIT ///////
mein neuer PHP-Code:
public function getProgress() {
$rawData = file_get_contents('plugins/elFinder-2.1.25/files/data/progressFile.json');
$cacheData = json_decode($rawData, true);
return $cacheData;
}
public function postGenerate() {
// getting values from form (like $record_num)
for ($i = 0; $i < 10; $i++) {
$data['progress'] = $i;
$fres = fopen('plugins/elFinder-2.1.25/files/data/progressFile.json', 'w');
fwrite($fres, json_encode($data));
fclose($fres);
sleep(1);
}
return "true";
}
mein Javascript-Code:
var interval = null;
function test() {
var i = 0;
interval = setInterval(function() {
$.ajax({
url: '/admin/movies/progress',
type: "GET",
async: true,
dataType: "text",
success: function (data) {
console.log(data);
$('#saveFileProgressBar').width(data.progress);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
toastr.error('Es ist ein Fehler aufgetreten beim Auslesen der Datei', 'Download File');
}
});
i++;
if(i == 5){
clearInterval(interval);
}
}, 500);
$.ajax({
url: '/admin/movies/1',
type: "GET",
async: true,
dataType: "text",
success: function (data) {
console.log(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
toastr.error('Es ist ein Fehler aufgetreten beim Auslesen der Datei', 'Download File');
}
});
}
wenn ich die async Linien kommentieren oder diese auf false gesetzt dann noch den Fortschritt Anruf zu warten, bis der andere Anruf – Damlo
@Damlo Check out jQuery '$ .when', wird dies beendet ist erlauben Sie, einen Rückruf nur einmal auszuführen, wenn 1 oder mehr Ajax-Anrufe abgeschlossen wurden. Dies ist ein Versprechen. – Ohgodwhy
@ Ohgodwhy ich bin mir nicht sicher, ob ich $ .when richtig verstehe. Kannst du mir ein Beispiel mit meinem "Problem" geben? – Damlo