Cet article présente principalement l'exemple de code de téléchargement asynchrone de fichiers sous forme Ajax (y compris les champs de fichiers). Il est très bon et a une valeur de référence. Les amis intéressés devraient le lire ensemble
<.> 1. Cause
Lors de la création d'une page front-end, vous devez appeler la requête Post de WebAPI, envoyer des champs et des fichiers (équivalent à l'envoi du formulaire de manière asynchrone via ajax, et obtenez le résultat renvoyé), puis obtenez La valeur de retour détermine si l'opération réussit.2. Essayez
J'ai d'abord essayé "jQuery Form Plugin", ce truc est un énorme gouffre, réalisez-le La compatibilité avec jquery1.9.2, ce n'est pas très bon. J'ai finalement résolu le problème de $.browser et j'ai constaté que je ne parvenais pas à obtenir la valeur de retour lors du téléchargement de fichiers en l'utilisant.$("#view").submit( $("#view").ajaxSubmit({ type: "post", url: "../api/Article/Add", dataType: "json", success: function (msg) { console.log(msg); }, error: function (msg) { $("#resultBox").html("连接服务器失败"); console.log(msg); } }) );
// are there files to upload? var files = $('input:file', this).fieldValue(); var found = false; for (var j=0; j < files.length; j++) if (files[j]) found = true; if (options.iframe || found) // options.iframe allows user to force iframe mode fileUpload(); else $.ajax(options);
3. Solution
Après de nombreuses anti-enquêtes, il a été constaté que xhr (XMLHttpRequest) est une bonne chose. Après les tests, les navigateurs grand public et les navigateurs mobiles prennent en charge cette fonctionnalité. Ce qui suit présente la méthode d'obtention de l'objet XMLHttpRequest natif pour télécharger le formulaire (fichier) dans l'ajax de jquery/zepto.function AjaxForm(formID, options) { var form = $(formID); //将form对象直接作为参数 new FormData对象 var formData = new FormData(form[0]); $("input[type='file']").forEach(function (item, i) { //获取file对象 即相当于可以直接post的$_FILES数据 var domFile = $(item)[0].files[0]; //追加file 对象 formData.append('file', domFile); }) if (!options)options = {}; options.url = options.url ? options.url : form.attr("action"); options.type = options.type ? options.type : form.attr("method"); options.data = formData; options.processData = false; // tell jQuery not to process the data options.contentType = false; // tell jQuery not to set contentType options.xhr = options.xhr ? options.xhr : function () { //这是关键 获取原生的xhr对象 做以前做的所有事情 var xhr = $.ajaxSettings.xhr(); xhr.upload.onload = function () { console.log("onload"); } xhr.upload.onprogress = function (ev) { if (ev.lengthComputable) { var percent = 100 * ev.loaded / ev.total; console.log(percent, ev) } } return xhr; }; options.success = options.success ? options.success : function (data) { alert(data) }; $.ajax(options); } //调用 $("#sub").click(function (e) { AjaxForm("#myForm"); });
Fonctionnement en cascade du menu déroulant
Ajax réalise une mise en cascade à trois niveaux des provinces et des municipalités
Application simple basée sur la soumission d'un formulaire Ajax et le traitement en arrière-plan
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!