JQuery est-il équivalent au téléchargement XMLHttpRequest?

En travaillant avec l'API de fichiers HTML5, le téléchargement s'effectue via un objet appelé upload dans XMLHttpRequest . C'est le tutoriel avec lequel je travaille (et le miroir de cache Google, car il est en panne pour le moment). C'est la partie pertinente:

 // Uploading - for Firefox, Google Chrome and Safari xhr = new XMLHttpRequest(); // Update progress bar xhr.upload.addEventListener("progress", function (evt) { 

Comme vous pouvez le voir, pour suivre la progression du téléchargement, l'objet XMLHttpRequest a une propriété appelée upload , que nous pouvons ajouter un gestionnaire d'événements.

Ma question est: jQuery est-il équivalent? . Je tente de laisser le code aussi propre et compatible avec le navigateur que possible, car chaque fois que Microsoft pense que c'est une bonne idée (bien qu'il semble être en 2012 ou 2013 ).

Voici ce que j'ai proposé pour contourner le problème. L'appel $ .ajax () permet de fournir un rappel pour générer le XHR. Je génère juste un avant d'appeler la demande, la configurer, puis créer une fermeture pour la renvoyer lorsque $ .ajax () l'aura besoin. Il aurait été beaucoup plus facile d'avoir accédé à cela via jqxhr, mais ils ne l'ont pas fait.

 var reader = new FileReader(); reader.onloadend = function (e) { var xhr, provider; xhr = jQuery.ajaxSettings.xhr(); if (xhr.upload) { xhr.upload.addEventListener('progress', function (e) { // ... }, false); } provider = function () { return xhr; }; // Leave only the actual base64 component of the 'URL' // Sending as binary ends up mangling the data somehow // base64_decode() on the PHP side will return the valid file. var data = e.target.result; data = data.substr(data.indexOf('base64') + 7); $.ajax({ type: 'POST', url: 'http://example.com/upload.php', xhr: provider, dataType: 'json', success: function (data) { // ... }, error: function () { // ... }, data: { name: file.name, size: file.size, type: file.type, data: data, } }); }; reader.readAsDataURL(file); 

La documentation pour le jqXHR (le surmesure du XMLHttpRequest qui est retourné à partir de l'appel .ajax () de jQuery) ne décrit pas la fonctionnalité de mise à jour comme étant exposée, ce qui ne signifie pas qu'elle n'est pas exposée. Cette question , cependant, semble indiquer que le téléchargement n'est pas exposé. La réponse fournit un moyen d'accéder à l'objet native XMLHttpRequest.

Dans les versions avant jQuery 1.5, l'objet XMLHttpRequest a été exposé directement, et vous pouvez donc accéder à toutes les fonctionnalités que le navigateur prend en charge. Ce didacticiel pour la construction d'un uploader glisser-déposer fait exactement cela.

Une recherche pour le téléchargement de fichiers jquery html 5 affiche ce plugin pour faire un téléchargement de fichiers multiples à l'aide de l'API de fichiers HTML 5, mais ce plugin ne fonctionne pas actuellement dans IE. Si vous ne souhaitez pas utiliser HTML 5 et que vous voulez avoir un support de navigateur croisé maintenant, il existe d'autres plugins auxquels vous pouvez consulter jQuery sur le site de connexion jQuery.