Ich habe eine Seite auf einer Website, wo Sie Dateien herunterladen können, die Sie zuvor bezahlt haben. Die Datei ist ein Zip-Archiv, das viele PDF-Dateien enthält. Wenn der Download-Link angeklickt wird, wird eine PHP-Datei aufgerufen, die etwas Arbeit leistet (Hinzufügen eines Stempels auf den PDFs), bevor die Datei geliefert wird. Da dies bei größeren Dateien einige Zeit dauern kann, habe ich einen Abfragemechanismus eingebaut, um dem Benutzer zu zeigen, was passiert. Die Abfrage wird über einen Ajax-Aufruf durchgeführt, die wie folgt aussieht:Ajax Polling, während andere Anfrage gesendet wurde funktioniert nicht auf Safari
$('.rm-table').on(clickhandler,'.fa-download', function(e){
tr = $(this).closest('tr');
id = tr.attr('id');
tr.find("progress").show();
tr.find('.downloadstatus').show();
tr.find('.downloadstatus').html('Start Download...');
setTimeout(getDownloadStatus(), 250);
});
function getDownloadStatus(){
setTimeout(function() {
$.ajax({
url: '/process/{{Auth::id()}}/'+id,
type: 'POST',
async: true,
cache: false,
data: {},
dataType: "json",
success: function(data, textStatus, jqXHR)
{
var tekst = data.tekst;
var perc = data.percentage;
tr.find('.downloadstatus').html(tekst);
tr.find('progress').val(perc);
if(tekst != 'done'){
getDownloadStatus();
} else {
tr.find('.downloadstatus').html("Done!");
tr.find('progress').val(100);
setTimeout(
function()
{
tr.find('progress').val(0);
tr.find('progress').hide();
tr.find('.downloadstatus').html("");
tr.find('.downloadstatus').hide();
}, 750);
}
},
error: function(jqXHR, textStatus, errorThrown) {
var response = jQuery.parseJSON(jqXHR.responseText);
alert(response.error);
}
});
}, 250);
}
Die Abfrage erfolgt, nachdem der Benutzer auf den Link klickt. So wird das Standardverhalten der Verbindung nicht verhindert.
Dies funktioniert in allen Browsern unter Windows, aber die Abfrage wird irgendwie nicht auf Safari auf einem Mac oder sogar anderen Browsern auf einem iPad gestartet. Irgendjemand eine Ahnung von was das Problem sein könnte?
Was ist clickhandler in dieser Zeile '$ ('. Rm-table'). On (clickhandler, '.fa-download', funktion (e) {'? –
var clickhandler = ('ontouchstart' in document.documentElement ? "touchstart": "click"); Zum Erkennen klicken oder berühren – HarmJan
Haben Sie das Ereignis 'onprogress' in' XMLHttpRequest' versucht? https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/ Using_XMLHttpRequest – RamRaider