Maison interface Web js tutoriel Utilisez ajaxfileupload.js pour implémenter le fichier de téléchargement ajax php version_jquery

Utilisez ajaxfileupload.js pour implémenter le fichier de téléchargement ajax php version_jquery

May 16, 2016 pm 04:43 PM
ajax 上传文件

PHP et d'autres scripts côté serveur fournissent la fonction de téléchargement de fichiers, et elle est relativement simple à mettre en œuvre. En utilisant JavaScript pour coopérer, vous pouvez implémenter le téléchargement de fichiers Ajax. Bien que jQuery lui-même ne fournisse pas une fonction aussi simplifiée, il existe de nombreux plug-ins qui peuvent y parvenir. Parmi eux, ajaxfileupload.js fourni par Phpletter.com est un plug-in léger, et sa méthode d'écriture est très similaire à la méthode globale $.post() fournie par jQuery, qui est simple et facile à utiliser.
Cependant, le plug-in est trop simplifié. En plus de fournir le chemin du fichier à télécharger, il ne peut pas transmettre de valeurs supplémentaires au serveur backend. J'ai donc modifié le script et ajouté un paramètre d'objet de données.

1.Principe

J'utilise PHP comme script serveur ici. Presque tous les livres sans PHP mentionneront comment utiliser la méthode move_uploaded_file() pour télécharger des fichiers, je n'entrerai donc pas dans les détails ici. Ce que je veux dire, c'est d'utiliser le principe du téléchargement Ajax.
Parce que j'utilise la bibliothèque jQuery, quand je pense à Ajax, ma première réaction est d'essayer la méthode $.post(), d'utiliser chaque sélecteur pour obtenir la valeur dans la zone fichier, puis de la soumettre au serveur d'arrière-plan. . Bien sûr, il s’est avéré plus tard que cela ne fonctionnait pas. (En raison de ce problème, j'ai également vérifié beaucoup d'informations, et il existe de nombreux scripts ASP et autres disponibles en ligne. Je ne sais vraiment pas quoi dire.)
Pour revenir au sujet, il n'est pas difficile d'implémenter le téléchargement Ajax et il existe de nombreuses méthodes. Le plug-in ajaxfileupload.js de Phpletter.com mentionné dans cet article utilise iframe. Il s'agit également d'une méthode courante pour réaliser le téléchargement sans actualiser la page lorsque vous n'utilisez pas de scripts JavaScript. (Ce blog utilise cette méthode pour écrire des logs en arrière-plan de bo-blog)
Le plug-in ajaxfileupload.js est également très simple. Il utilise d'abord le sélecteur de jQuery pour obtenir la valeur du chemin du fichier dans la boîte de téléchargement du fichier, puis crée dynamiquement une iframe et y crée une nouvelle boîte de fichier, fournissant une méthode de publication pour soumettre. dans les coulisses. Enfin, les résultats sont renvoyés à la réception.

2. Utiliser

L'utilisation du plug-in ajaxfileupload.js est très simple.
Le code HTML du frontend est similaire :

<script type="text/javascript">
$(#buttonUplod).click(function () {
 $.ajaxFileUpload ({
  url:'doajaxfileupload.php', //你处理上传文件的服务端
  secureuri:false, //与页面处理代码中file相对应的ID值
  fileElementId:'img',
  dataType: 'json', //返回数据类型:text,xml,json,html,scritp,jsonp五种
  success: function (data) {
   alert(data.file_infor);
  }
 })
});
</script>
<input id="img" type="file" size="45" name="img" >
<button id="buttonUpload" onclick="return ajaxFileUpload();">Upload</button> 
Copier après la connexion

Script backend doajaxfileupload.php :

<&#63;php
 $upFilePath = "../attachment/";
$ok=@move_uploaded_file($_FILES['img']['tmp_name'],$upFilePath);
 if($ok === FALSE){
  echo json_encode('file_infor'=>'上传失败');
 }else{
  echo json_encode('file_infor'=>'上传成功');
 }
&#63;> 

Copier après la connexion


Pour les tests, vous pouvez enregistrer la valeur de la variable transmise en utilisant une méthode similaire à la suivante :

$file_info = var_export($_FILES,true);
$ok = file_put_contents("../attachment/file_info.txt",$file_info);
if ($ok) exit(json_encode('file_infor'=>'Téléchargement réussi'));
exit (json_encode('file_infor'=>'Échec du téléchargement'));


※ Remarque
Veuillez noter la balise dans la zone du fichier de code HTML :

1. id='img' est utilisé pour identifier le fileElementId:'img' du plug-in ajaxfileupload.js Le sélecteur jQuery utilisera cette chaîne pour obtenir la valeur de la zone de texte
. 2. name='img' est utilisé lors de la soumission au script d'arrière-plan via le mode post. PHP lit les données du fichier téléchargé via $_FILES['img']. S'il n'y a pas une telle valeur, la variable $_FILES est vide ;

Donc, ces deux valeurs sont indispensables et ne peuvent être confondues.

3. Prise en charge de paramètres supplémentaires

Parfois, nous devons traiter les fichiers téléchargés en fonction de certaines variables en arrière-plan. Par exemple, mettez à jour les fichiers. À ce stade, vous devez transmettre certains paramètres supplémentaires à la même étape. J'ai donc modifié le plugin ajaxfileupload.js :

addOtherRequestsToForm: function(form,data)
{
 // add extra parameter
 var originalElement = $('<input type="hidden" name="" value="">');
 for (var key in data) {
  name = key;
  value = data[key];
  var cloneElement = originalElement.clone();
cloneElement.attr({'name':name,'value':value});
  $(cloneElement).appendTo(form);
 }
 return form;
}, 

ajaxFileUpload: function(s) {
 // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout  
 s = jQuery.extend({}, jQuery.ajaxSettings, s);
 var id = new Date().getTime()    
 var form = jQuery.createUploadForm(id, s.fileElementId);
 if ( s.data ) form = jQuery.addOtherRequestsToForm(form,s.data);
 var io = jQuery.createUploadIframe(id, s.secureuri); 

Copier après la connexion

La partie marquée en rouge est le contenu que j'ai ajouté. De cette façon, je peux transmettre des paramètres supplémentaires dans la partie HTML frontend via un code similaire au suivant :

url:'doajaxfileupload.php', //Votre serveur qui gère les fichiers téléchargés
secureuri:false, //valeur ID correspondant au fichier dans le code de traitement de la page
data:{'test':'test','ok':'ok'}, //Transmises en tant qu'objet, les valeurs des variables JavaScript peuvent être saisies dans la partie contenu
fileElementId : 'img',

Le script de traitement en arrière-plan est :

array_push($_FILES,$_REQUEST);
$file_info = var_export($_FILES,true);
$ok = file_put_contents("../attachment/file_info.txt",$file_info);
if ($ok) exit(json_encode('file_infor'=>'上传成功'));
exit (json_encode('file_infor'=>'上传失败')); 

Copier après la connexion

On voit que le principe est très simple, c'est-à-dire ajouter le contenu supplémentaire de l'objet de données au formulaire sous l'iframe, le transmettre au script PHP d'arrière-plan, et obtenir ces valeurs​​avec des variables telles que $_REQUEST.
Le contenu de file_info.txt retenu dans la sortie en arrière-plan est le suivant :

tableau (
'fichier' =>
tableau (
'name' => 'firefox-java.txt',
'type' => 'texte/plain',
'tmp_name' => 'D:\Tools\xampp\tmp\phpED45.tmp',
'erreur' => 0,
'taille' => 250,
),
0 =>
tableau (
'test' => 'test',
'ok' => 'ok',
'PHPSESSID' => 'e379fd4fb2abca6e802a1302805a5535',
),
)

ajaxfileupload.js :

jQuery.extend({
  createUploadIframe: function(id, uri)
 {
  //create frame
var frameId = 'jUploadFrame' + id;
if(window.ActiveXObject) {
var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
if(typeof uri== 'boolean'){
io.src = 'javascript:false';
}
else if(typeof uri== 'string'){
io.src = uri;
}
}
else {
var io = document.createElement('iframe');
io.id = frameId;
io.name = frameId;
}
io.style.position = 'absolute';
io.style.top = '-1000px';
io.style.left = '-1000px'; 

document.body.appendChild(io); 

return io  
  },
  createUploadForm: function(id, fileElementId)
 {
 //create form 
 var formId = 'jUploadForm' + id;
 var fileId = 'jUploadFile' + id;
 var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); 
 var oldElement = $('#' + fileElementId);
 var newElement = $(oldElement).clone();
 $(oldElement).attr('id', fileId);
 $(oldElement).before(newElement);
 $(oldElement).appendTo(form);
 //set attributes
 $(form).css('position', 'absolute');
 $(form).css('top', '-1200px');
 $(form).css('left', '-1200px');
 $(form).appendTo('body'); 
 return form;
  },
 addOtherRequestsToForm: function(form,data)
 {
 // add extra parameter
 var originalElement = $('<input type="hidden" name="" value="">');
 for (var key in data) {
  name = key;
  value = data[key];
  var cloneElement = originalElement.clone();
  cloneElement.attr({'name':name,'value':value});
  $(cloneElement).appendTo(form);
 }
 return form;
 }, 

  ajaxFileUpload: function(s) {
    // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout 
    s = jQuery.extend({}, jQuery.ajaxSettings, s);
    var id = new Date().getTime()    
 var form = jQuery.createUploadForm(id, s.fileElementId);
 if ( s.data ) form = jQuery.addOtherRequestsToForm(form,s.data);
 var io = jQuery.createUploadIframe(id, s.secureuri);
 var frameId = 'jUploadFrame' + id;
 var formId = 'jUploadForm' + id; 
    // Watch for a new set of requests
    if ( s.global && ! jQuery.active++ )
 {
  jQuery.event.trigger( "ajaxStart" );
 }      
    var requestDone = false;
    // Create the request object
    var xml = {} 
    if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s]);
    // Wait for a response to come back
    var uploadCallback = function(isTimeout)
 {  
  var io = document.getElementById(frameId);
try
  {  
  if(io.contentWindow)
  {
   xml.responseText = io.contentWindow.document.body&#63;io.contentWindow.document.body.innerHTML:null;
 xml.responseXML = io.contentWindow.document.XMLDocument&#63;io.contentWindow.document.XMLDocument:io.contentWindow.document;
  }else if(io.contentDocument)
  {
   xml.responseText = io.contentDocument.document.body&#63;io.contentDocument.document.body.innerHTML:null;
 xml.responseXML = io.contentDocument.document.XMLDocument&#63;io.contentDocument.document.XMLDocument:io.contentDocument.document;
  }   
}catch(e)
  {
  jQuery.handleError(s, xml, null, e);
  }
if ( xml || isTimeout == "timeout")
  {  
requestDone = true;
var status;
try {
status = isTimeout != "timeout" &#63; "success" : "error";
// Make sure that the request was successful or notmodified
if ( status != "error" )
   {
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.uploadHttpData( xml, s.dataType );  
// If a local callback was specified, fire it and pass it the data
if ( s.success )
s.success( data, status );
// Fire the global callback
if( s.global )
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
} else
jQuery.handleError(s, xml, status);
} catch(e)
  {
status = "error";
jQuery.handleError(s, xml, status, e);
} 

// The request was completed
if( s.global )
jQuery.event.trigger( "ajaxComplete", [xml, s] ); 

// Handle the global AJAX counter
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" ); 

// Process result
if ( s.complete )
s.complete(xml, status); 

jQuery(io).unbind() 

setTimeout(function()
     { try
     {
      $(io).remove();
      $(form).remove(); 
     } catch(e)
     {
      jQuery.handleError(s, xml, null, e);
     }     

     }, 100) 

xml = null 

}
    }
    // Timeout checker
    if ( s.timeout > 0 )
 {
setTimeout(function(){
// Check to see if the request is still happening
if( !requestDone ) uploadCallback( "timeout" );
}, s.timeout);
    }
    try
 {
      // var io = $('#' + frameId);
  var form = $('#' + formId);
  $(form).attr('action', s.url);
  $(form).attr('method', 'POST');
  $(form).attr('target', frameId);
if(form.encoding)
  {
form.encoding = 'multipart/form-data';  
}
else
  {  
form.enctype = 'multipart/form-data';
}  
$(form).submit(); 

    } catch(e)
 {  
jQuery.handleError(s, xml, null, e);
    }
if(window.attachEvent){
document.getElementById(frameId).attachEvent('onload', uploadCallback);
    }
    else{
document.getElementById(frameId).addEventListener('load', uploadCallback, false);
    }  
    return {abort: function () {}}; 

  }, 

  uploadHttpData: function( r, type ) {
    var data = !type;
    data = type == "xml" || data &#63; r.responseXML : r.responseText;
    // If the type is "script", eval it in global context
    if ( type == "script" )
jQuery.globalEval( data );
    // Get the JavaScript object, if JSON is used.
    if ( type == "json" )
eval( "data = " + data );
    // evaluate scripts within html
    if ( type == "html" )
jQuery("<div>").html(data).evalScripts();
  //alert($('param', data).each(function(){alert($(this).attr('value'));}));
    return data;
  }
}) 
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment télécharger des fichiers sur un disque cloud 123 Comment télécharger des fichiers sur un disque cloud 123 Feb 24, 2024 pm 05:30 PM

Comment télécharger des fichiers sur 123 Cloud Disk ? Vous pouvez télécharger des fichiers sur 123 Cloud Disk pour le stockage, mais la plupart des amis ne savent pas comment télécharger des fichiers sur 123 Cloud Disk. Voici ensuite l'image et le texte expliquant comment télécharger des fichiers sur 123 Cloud. Disque apporté par l'éditeur pour les joueurs Tutoriel, les utilisateurs intéressés viennent y jeter un oeil ! Comment télécharger des fichiers sur 123 Cloud Disk 1. Ouvrez d'abord 123 Cloud Disk et entrez dans la page principale, inscrivez-vous ou connectez-vous au compte 2. Entrez ensuite dans la page comme indiqué ci-dessous, cliquez sur le bouton [Télécharger] guidé par la flèche ; 3. Ensuite, le bas se développera. Dans la fenêtre de la barre de fonctions, cliquez sur la fonction [Sélectionner un fichier] ; 4. Enfin, sélectionnez le fichier à télécharger et attendez patiemment que le téléchargement soit terminé.

Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX Comment résoudre l'erreur 403 rencontrée par la requête jQuery AJAX Feb 20, 2024 am 10:07 AM

Titre : Méthodes et exemples de code pour résoudre les erreurs 403 dans les requêtes jQuery AJAX L'erreur 403 fait référence à une demande selon laquelle le serveur interdit l'accès à une ressource. Cette erreur se produit généralement parce que la demande manque d'autorisations ou est rejetée par le serveur. Lorsque vous effectuez des requêtes jQueryAJAX, vous rencontrez parfois cette situation. Cet article explique comment résoudre ce problème et fournit des exemples de code. Solution : Vérifiez les autorisations : assurez-vous d'abord que l'adresse URL demandée est correcte et vérifiez que vous disposez des autorisations suffisantes pour accéder à la ressource.

Comment résoudre l'erreur 403 de la requête jQuery AJAX Comment résoudre l'erreur 403 de la requête jQuery AJAX Feb 19, 2024 pm 05:55 PM

jQuery est une bibliothèque JavaScript populaire utilisée pour simplifier le développement côté client. AJAX est une technologie qui envoie des requêtes asynchrones et interagit avec le serveur sans recharger la page Web entière. Cependant, lorsque vous utilisez jQuery pour effectuer des requêtes AJAX, vous rencontrez parfois des erreurs 403. Les erreurs 403 sont généralement des erreurs d'accès refusé par le serveur, probablement en raison de problèmes de politique de sécurité ou d'autorisation. Dans cet article, nous verrons comment résoudre la requête jQueryAJAX rencontrant une erreur 403.

Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Comment obtenir des variables de la méthode PHP en utilisant Ajax ? Mar 09, 2024 pm 05:36 PM

L'utilisation d'Ajax pour obtenir des variables à partir de méthodes PHP est un scénario courant dans le développement Web. Grâce à Ajax, la page peut être obtenue dynamiquement sans actualiser les données. Dans cet article, nous présenterons comment utiliser Ajax pour obtenir des variables à partir de méthodes PHP et fournirons des exemples de code spécifiques. Tout d’abord, nous devons écrire un fichier PHP pour gérer la requête Ajax et renvoyer les variables requises. Voici un exemple de code pour un simple fichier PHP getData.php :

Comment résoudre le problème de l'erreur 403 jQuery AJAX ? Comment résoudre le problème de l'erreur 403 jQuery AJAX ? Feb 23, 2024 pm 04:27 PM

Comment résoudre le problème de l’erreur 403 jQueryAJAX ? Lors du développement d'applications Web, jQuery est souvent utilisé pour envoyer des requêtes asynchrones. Cependant, vous pouvez parfois rencontrer le code d'erreur 403 lors de l'utilisation de jQueryAJAX, indiquant que l'accès est interdit par le serveur. Cela est généralement dû aux paramètres de sécurité côté serveur, mais il existe des moyens de résoudre le problème. Cet article explique comment résoudre le problème de l'erreur 403 jQueryAJAX et fournit des exemples de code spécifiques. 1. faire

Comment télécharger des fichiers sur Nut Cloud Comment télécharger des fichiers sur Nut Cloud Feb 27, 2024 pm 03:58 PM

Nut Cloud est un outil de gestion de fichiers efficace dédié à fournir aux utilisateurs des services intelligents d'enregistrement et de synchronisation de fichiers. Il dispose de puissantes fonctions de synchronisation et de sauvegarde des données pour garantir la sécurité des données des utilisateurs. Une série de fonctions de Nut Cloud sont conçues pour répondre aux besoins des utilisateurs dans différents scénarios et offrir une excellente expérience utilisateur. Alors, comment télécharger des fichiers dans l'application Nut Cloud ? Ce guide didacticiel vous donnera une introduction détaillée aux étapes. J'espère qu'il pourra aider tous ceux qui en ont besoin. Comment télécharger des fichiers sur Nut Cloud ? 1. Sur la page Mes fichiers, cliquez sur My Nut Cloud pour l'ouvrir. 2. Sur la page ouverte, cliquez sur l'icône plus dans le coin inférieur droit. 3. Dans les options qui apparaissent en bas, cliquez sur Télécharger depuis la carte SD. 4. Dans la mémoire ouverte du téléphone mobile, sélectionnez le fichier.

PHP vs Ajax : solutions pour créer du contenu chargé dynamiquement PHP vs Ajax : solutions pour créer du contenu chargé dynamiquement Jun 06, 2024 pm 01:12 PM

Ajax (Asynchronous JavaScript et XML) permet d'ajouter du contenu dynamique sans recharger la page. En utilisant PHP et Ajax, vous pouvez charger dynamiquement une liste de produits : HTML crée une page avec un élément conteneur et la requête Ajax ajoute les données à l'élément après l'avoir chargé. JavaScript utilise Ajax pour envoyer une requête au serveur via XMLHttpRequest afin d'obtenir des données produit au format JSON à partir du serveur. PHP utilise MySQL pour interroger les données produit de la base de données et les encoder au format JSON. JavaScript analyse les données JSON et les affiche dans le conteneur de pages. Cliquer sur le bouton déclenche une requête Ajax pour charger la liste de produits.

Échange de données asynchrone à l'aide des fonctions Ajax Échange de données asynchrone à l'aide des fonctions Ajax Jan 26, 2024 am 09:41 AM

Comment utiliser les fonctions Ajax pour réaliser une interaction de données asynchrone Avec le développement de la technologie Internet et Web, l'interaction des données entre le front-end et le back-end est devenue très importante. Les méthodes traditionnelles d’interaction avec les données, telles que l’actualisation des pages et l’envoi de formulaires, ne peuvent plus répondre aux besoins des utilisateurs. Ajax (JavaScript asynchrone et XML) est devenu un outil important pour l'interaction de données asynchrones. Ajax permet au Web d'utiliser JavaScript et l'objet XMLHttpRequest

See all articles