Jquery POST 带有 FormData 的图像和字符串

Jquery POST image and string with FormData

这是 JQuery 部分:

            $(".btnGorevOlustur").click(function (e) {

                var fileUpload = $(".fileGorevResim").get(0);
                var files = fileUpload.files;
                var dt = new FormData();
                for (var i = 0; i < files.length; i++) {
                    dt.append(files[i].name, files[i]);
                }

                var gPanoID = id;
                var gListeID = gorevListeID;
                var gBaslik = $(".txtGorevBaslik").val();
                var gAciklama = $(".txtareaGorevAciklama").val();
                var gSure = $(".txtGorevSure").val();

                dt.append("gpid", gPanoID);
                dt.append("glid", gListeID);
                dt.append("gbas", gBaslik);
                dt.append("gacik", gAciklama);
                dt.append("gsur", gSure);


                if (gBaslik != null && gBaslik != "" && gAciklama != null && gAciklama != "" && gSure != null && gSure != "") {
                    $.ajax({
                        type: "POST",
                        url: "PanoHandler.ashx",
                        dataType: "json",
                        data: dt,
                        contentType: false,
                        processData: false,
                    });
                    e.preventDefault();
                }
            });

这是处理程序部分:

        var gorevBaslik = context.Request.Form["gbas"];
        var gorevAciklama = context.Request.Form["gacik"];
        var gorevSure = context.Request.Form["gsur"];
        var gorevPanoID = context.Request.Form["gpid"];
        var gorevListeID = context.Request.Form["glid"];
        var tarih = DateTime.Now.ToString("ddMMyyyyHHmmss");
        if (context.Request.Files.Count > 0)
        {
            HttpFileCollection files = context.Request.Files;
            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];
                string fname = context.Server.MapPath("~/img/panofoto/" + file.FileName + tarih);
                file.SaveAs(fname);
                sgFoto = file.FileName + tarih;
            }
        }
        if (!String.IsNullOrEmpty(gorevBaslik) && !String.IsNullOrEmpty(gorevAciklama) && !String.IsNullOrEmpty(gorevSure))
        {
            var gorev = new Pano_Gorev
            {
                Baslik = gorevBaslik,
                Aciklama = gorevAciklama,
                GorevSuresi = gorevSure,
                PanoID = Convert.ToInt32(gorevPanoID),
                ListeID = Convert.ToInt32(gorevListeID),
                Resim = sgFoto,
                Olusturan = 1,
                OlusturmaTarihi = DateTime.Now
            };
            dbo.Pano_Gorev.AddObject(gorev);
            dbo.SaveChanges();
            sresult = true;
            context.Response.Write(sresult);
        }
        else
        {
            sresult = false;
            context.Response.Write(sresult);
        }

问题出在处理程序上,因为所有值都为空。

  context.request.Form[..] //all coming as null. 

我也尝试了以下方法:

context.request[..] 

但这也没有用。

我应该怎么做才能解决这个问题?

终于找到问题了。 Jquery 项目中的文档是旧版本,是这些代码不起作用的问题。当我更新 jquery 时,代码确实有效。

我编辑了一些小错误。

因此,此代码可以使用,问题已解决。

使用原生 javascript。例如这是 html :

<form id="upload_form" enctype="multipart/form-data" method="post">
  <input type="file" name="file1" id="file1"><br>
  <input type="button" value="Upload File" onclick="uploadFile()">
</form>

这是 javascript :

function uploadFile(){
    var file = _("file1").files[0];
    // alert(file.name+" | "+file.size+" | "+file.type);
    var formdata = new FormData();
    formdata.append("file1", file);
    var ajax = new XMLHttpRequest();
    ajax.open("POST", "url");
    ajax.send(formdata);
}