Javascript 使用Kendo UI上载控件向XmlHttpRequest添加请求头

Javascript 使用Kendo UI上载控件向XmlHttpRequest添加请求头,javascript,kendo-ui,Javascript,Kendo Ui,我试图使用Telerik提供的代码将请求头添加到XHR中,但出现以下错误 “0x800a139e-JavaScript运行时错误:InvalidStateError” 这是密码 $(document).ready(function () { $("#file").kendoUpload({ multiple: false, async:

我试图使用Telerik提供的代码将请求头添加到XHR中,但出现以下错误

“0x800a139e-JavaScript运行时错误:InvalidStateError”

这是密码

$(document).ready(function () {
                        $("#file").kendoUpload({
                            multiple: false,
                            async: {
                                saveUrl: "save",
                            },
                            upload: onUpload,

                        });
                    });

function onUpload(e) {
                        var xhr = e.XMLHttpRequest;
                        if (xhr) {
                            xhr.addEventListener("readystatechange", function (e) {
                                if (xhr.readyState == 1 /* OPENED */) {
                                    xhr.setRequestHeader("X-Foo", "Bar");
                                }
                            });
                        }
                    }

事实证明,Internet Explorer使用readyState 1触发readystatechange两次,第二次执行处理程序会导致错误。作为当前案例的解决方法,您可以命名已执行的处理程序,并在第一次执行后解除绑定

function onUpload(e) {
                    var xhr = e.XMLHttpRequest;
                    if (xhr) {
                        xhr.addEventListener("readystatechange", function onUploadReady(e) {
                            if (xhr.readyState == 1 /* OPENED */) {
                                xhr.setRequestHeader("X-Foo", "Bar");
                                xhr.removeEventListener("readystatechange", onUploadReady);
                            }
                        });
                    }
                }

如果浏览器不支持文件API,则将未定义。很好,谢谢:)