Aracılığıyla paylaş


XMLHttpRequest, Microsoft Edge'de boş bir dosya öğesi olan FormData'yi doğru gönderemiyor

Uyarı

Kullanımdan kaldırılan, destek dışı Internet Explorer 11 masaüstü uygulaması, Windows 10'un belirli sürümlerinde Microsoft Edge güncelleştirmesi aracılığıyla kalıcı olarak devre dışı bırakılmıştır. Daha fazla bilgi için bkz. Internet Explorer 11 masaüstü uygulamasının kullanımdan kaldırılması hakkında SSS.

Bu makalede, Windows 10, sürüm 1809'da Microsoft Edge ile FormData tarafından boş bir dosya öğesi içeren XMLHttpRequest'nün doğru şekilde gönderilememesi sorununu çözmek için bir geçici çözüm sunulmaktadır.

Orijinal ürün sürümü: Microsoft Edge, Windows 10
Özgün KB numarası: 4490157

Belirtiler

XMLHttpRequest (jQuery.ajax()) yöntemi gönderildiğinde, Windows 10, sürüm 1809 için Microsoft Edge'de boş bir dosya öğesi içeren bir nesneyi doğru şekilde gönderemezFormData.

Örneğin, aşağıdaki kod örneğinde olduğu gibi yalnızca bir dosya öğesi ve diğer tüm dosya öğelerini boş içeren bir dosya ayarlarsınız:

<!DOCTYPE html>
<html>
    <head>
        <script src="https://code.jquery.com/jquery-1.12.4.js"
            integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
            crossorigin="anonymous"></script>
    </head>
    <body>
        <form action="/AjaxUploadSample/Home/FileUpload" enctype="multipart/form-data" method="post">
            <input name="files" id="files" type="file" value=""><br>
            <input name="files" id="files" type="file" value=""><br>
            <input name="files" id="files" type="file" value=""><br>
            <button id="btn" type="button">Async Upload</button>
        </form>
        <hr>
        <p id="message" style="white-space:pre;"></p>
        <script>
            $(document).ready(function () {
                $("#btn").on("click", function () {
                    var _form = $(this).closest("form")[0];
                    $.ajax({
                        type: "post",
                        url: _form.action,
                        processData: false,
                        contentType: false,
                        data: new FormData(_form),
                        success: function (data, textStatus, jqXHR) {
                            $("#message").text(data.Message);
                        }
                    });
                });
            });
        </script>
    </body>
</html>

Async Upload'a tıkladığınızda, set dosyası doğru bir şekilde tanınmıyor.

Neden

Bu sorun, Windows 10, sürüm 1809 için Microsoft Edge'de FormData uygulaması değiştirildiğinde meydana gelir.

Geçici çözüm

Bu sorunu geçici olarak çözmek için $.ajax() çağrılmadan önce aşağıdaki kodu ekleyin ve boş girişleri açıkça atlayın.

// Workaround
var _data = new FormData(_form);
if (_data.entries)
{
    var data = new FormData();
    for (var p of _data)
    {
        if (p[1])
        {
            // p[1] is the value of form entry
            data.append(p[0], p[1]);
        }
    } _data = data;
}
$.ajax(
{
    type: 'post',
    url: _form.action,
    processData: false,
    contentType: false,
    data: _data,
    success: function (data, textStatus, jqXHR)
    {
        $('#message').text(data.Message);
    }
});