Microsoft Edge: SCRIPT0: SCRIPT0: «FormData» не определен - PullRequest
0 голосов
/ 14 октября 2019

У меня есть один XMLHttpRequest в javascript, который отправляет объект FormData на сервер. Этот вызов прекрасно работает в Chrome. В Microsoft Edge я вижу эту ошибку: «SCRIPT0: SCRIPT0:« FormData »не определен».

Вот мой фрагмент:

function saveRecording(recordingData, endpoint, token) {

    var randomNumber = Math.floor(100000 + Math.random() * 900000);
    randomNumber = randomNumber.toString().slice(0, 4);
    var recordingName = "Recording " + randomNumber;

    var sender = {
        sliceNumber: 1,
        sliceMaxSize: 1024 * 1024,
        sliceStart: 0,
        sliceEnd: 1024 * 1024,
        total: recordingData.blob.size,
        recordlength: recordingData.length.toFixed(2),
        fileName: '',
        sendSlice: function () {
            if (this.total > 0) {
                var slice = undefined;

                if (this.total >= this.sliceMaxSize) {
                    this.sliceEnd = this.sliceStart + this.sliceMaxSize;
                }
                else {
                    this.sliceEnd = this.sliceStart + this.total;
                }
                slice = recordingData.blob.slice(this.sliceStart, this.sliceEnd);

                var isLastSlice = !((this.total - this.sliceMaxSize) > 0);
                console.log(slice);
                var formData = new FormData();

                formData.append("data", slice);
                formData.append("sliceMaxSize", this.sliceMaxSize);
                formData.append("sliceNumber", this.sliceNumber);
                formData.append("fileName", this.fileName);
                formData.append("dictation", JSON.stringify(recordingData.dictation));
                formData.append("isLastSlice", isLastSlice);
                formData.append("length", this.recordlength);
                formData.append("encoding", recordingData.encoding);
                formData.append("name", recordingName);

                //var params = 'data=ipsum&sliceMaxSize=binny&sliceMaxSize=binny&sliceMaxSize=binny&sliceMaxSize=binny&sliceMaxSize=binny&sliceMaxSize=binny';

                var sender_this = this;
                var request = new XMLHttpRequest();
                request.onreadystatechange = function () {
                    //readyState=4 means request finished and response is ready
                    if (this.readyState == 4) {
                        if (this.status == 200) {
                            //Success 
                            sender_this.fileName = JSON.parse(this.response).fileName;
                            sender_this.sliceNumber++;
                            sender_this.sliceStart = sender_this.sliceStart + sender_this.sliceMaxSize;
                            sender_this.total = sender_this.total - sender_this.sliceMaxSize;

                            // send the next slice
                            sender_this.sendSlice();
                        }
                        else {
                            //Fail
                            self.postMessage({ command: "saveRecordingFail", message: JSON.parse(this.response) });
                        }
                    }
                };
                request.open("POST", endpoint, true);
                request.setRequestHeader("Accept", "application/json, text/plain, */*");
                //request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                request.setRequestHeader(token.name, token.value);
                request.send(formData);

            }
            else {
                //recording completely sent to server, post message to worker caller
                self.postMessage({ command: "saveRecordingSuccess" });
            }
        }
    };

    // send the slice
    sender.sendSlice();
}

Обход уже пробовал:

Я уже проверил, что FormData работает в ребре, вручную пробуя на граничную консоль, которая успешно создала объект FormData.

FormData отлично работает в консоли краевого браузера

1 Ответ

0 голосов
/ 15 октября 2019

Я попытался выполнить тест с примером кода ниже и обнаружил, что он работает нормально с браузером MS Edge (строка агента пользователя: IE 11)

<!doctype html>
<script>
let formData = new FormData();
formData.append('key1', 'value1');
formData.append('key2', 'value2');

// List key/value pairs
for(let [name, value] of formData) {
  alert(`${name} = ${value}`);  
}
</script>
</html>

Я предлагаю вам проверить все значения, которые вы пытаетесь добавить, и убедиться, что все они имеют правильные и правильные значения.

Я предлагаю вампроверьте все значения одно за другим, чтобы найти проблемное значение.

Это может помочь сузить проблему. Чем вам будет проще решить проблему.

Ссылка:

FormData

...