javascript - FormData 不适用于 Firefox 上的 String

标签 javascript ajax firefox cross-browser xmlhttprequest

我制作了一个网站,该网站使用 1 级和 2 级的 ajax XmlHttpRequest。使用谷歌浏览器可以正常工作。但现在我正在尝试使用其他浏览器和 firefox 它返回此异常消息:

Component returned failure code: 0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA) [nsIDOMFormData.append]

现在,我使用的代码如下:

try {
            var sampleFile = document.getElementById("file").files[0];
            var ext = $("#file").val().substr(
                    $("#file").val().lastIndexOf(".") + 1).toLowerCase();
            if ($("#file").val() != "" && ext != "jpg" && ext != "jpeg"
                    && ext != "bmp" && ext != "png" && ext != "gif") {
                alert("Il formato dell'immagine purtroppo non è valido!\nSono ammesse immagini JPG,JPEG,GIF,PNG e BMP.");
                return;
            }

            var nomeDaPulire = document.getElementById("nome").value;

            var cognomeDaPulire = document.getElementById("cognome").value;
            var usernameDaPulire = document.getElementById("username").value;
            var pwdDaPulire = document.getElementById("password").value;
            var pwdBisDaPulire = document.getElementById("passwordBis").value;
            var anno = document.getElementById("anno").value;
            var professione = document.getElementById("comboProfessione").value;
            var città = Pulisci(document.getElementById("comboCittà").value);
            var sessoM = document.getElementById("M").checked;
            var sesso = "";
            var nome = "";
            var cognome = "";
            var username = "";
            var pwd = "";
            var pwdBis = "";
            var email = "";
            var emailDaPulire = document.getElementById("email").value;

            if (nomeDaPulire == "" 
                    || cognomeDaPulire == "" || emailDaPulire == ""
                    || pwdDaPulire == "" || pwdBisDaPulire == ""
                    || professione == "nullo" || anno == "nullo"
                    || città == "nullo") {
                alert("Riempi tutti i campi!");
                return;
            }

            if (checkSpecial(nomeDaPulire) == false
                    || checkSpecial(cognomeDaPulire) == false
                    || checkSpecialUser(usernameDaPulire) == false
                    || checkSpecialPwd(pwdDaPulire) == false
                    || checkSpecialPwd(pwdBisDaPulire) == false
                    || checkSpecialEmail(emailDaPulire) == false) {
                alert("Per favore, non inserire caratteri speciali!");
                return;
            } else {
                nome = Pulisci(nomeDaPulire);
                cognome = Pulisci(cognomeDaPulire);
                username = Pulisci(usernameDaPulire);
                pwd = Pulisci(pwdDaPulire);
                pwdBis = Pulisci(pwdBisDaPulire);
                email = Pulisci(emailDaPulire);
            }

            if (sessoM == true) {
                sesso = "M";
            } else {
                sesso = "F";
            }

            var celiaco = document.getElementById("celiaco").checked;
            if (celiaco == true)
                cel = 1;
            else
                cel = 0;

            var lattosio = document.getElementById("lattosio").checked;
            if (lattosio == true)
                lat = 1;
            else
                lat = 0;

            var animal = document.getElementById("animal").checked;
            if (animal == true)
                an = 1;
            else
                an = 0;

            var biologico = document.getElementById("bio").checked;
            if (biologico == true)
                bio = 1;
            else
                bio = 0;

            var linea = document.getElementById("linea").checked;
            if (linea == true)
                lin = 1;
            else
                lin = 0;

            var vegan = document.getElementById("vegan").checked;
            if (vegan == true)
                veg = 1;
            else
                veg = 0;

            if (pwd.localeCompare(pwdBis) == 0) {
                    d3.select("#button").remove();
                d3.select("#buttonLine").append("img").attr("id","immLoad").attr("src",
                        "imm/progressLoad.gif");
                formdata.append("username", username);
                formdata.append("pwd", pwd);
                formdata.append("nome", nome);
                formdata.append("cognome", cognome);
                formdata.append("sesso", sesso);
                formdata.append("professione", professione);
                formdata.append("anno", anno);
                formdata.append("citt", città);
                formdata.append("lattosio", lat);
                formdata.append("glutine", cel);
                formdata.append("linea", lin);
                formdata.append("vegan", veg);
                formdata.append("biologico", bio);
                formdata.append("animal", an);
                formdata.append("sampleFile", sampleFile);
                formdata.append("email", email);
                var xhr = new XMLHttpRequest();
                xhr.open("POST", "RegistraUtente", true);

                xhr.send(formdata);

                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200) {
                            var str = xhr.responseText;
                            if (str.length == 2) {
                                alert("lo username scelto è già in uso, per favore scegline un'altro!");
                            } else {
                                alert("la registrazione è avvenuta correttamente! Tra pochi istanti arriverà l'email con il link di conferma!");
                                window.location.href = "#login";
                            }
                        } else {
                            alert("error with the server");
                            d3.select("#immLoad").remove();
                            d3.select("#buttonLine").append("a").attr("class", "super button blue").attr("id",
                            "button").text("REGISTRATI").style("font-size", "16px").style(
                            "font-family", "GeezaPro, Calibri").on(
                            "click",
                            function() {
                                registrazione();
                            });
                        }
                    }
                };
            } else {
                alert("Le due password devono coincidere!");
            }
        } catch (e) {
            alert(e.message);
            return;
        }

Pulisci 函数如下:

function Pulisci(temp){
    temp=temp.ReplaceAll("è","#egrave;");
    temp=temp.ReplaceAll("à","#agrave;");
    temp=temp.ReplaceAll("ì","#igrave;");
    temp=temp.ReplaceAll("ò","#ograve;");
    temp=temp.ReplaceAll("ù","#ugrave;");
    temp=temp.ReplaceAll("é","#eacuta;");
    temp=temp.ReplaceAll("€","#euro;");
    temp=temp.ReplaceAll("°","#ordm;");
    return temp;

这里有什么问题?为什么 firefox 不起作用? 请帮助!! 谢谢!

最佳答案

太好了,终于获得了足够的信息来解决您的问题,您几乎错过了问题中所有重要的事情。

根据 specs FormData 仅适用于 BlobDOMString。这意味着它不能与 String 一起使用,StringObject 而不是文字 string

作为 Mozilla indicated ,它与BlobFilestring 一起使用,否则,它将强制转换为string。但不知何故, String 实例无法自动转换(我认为你应该将其归档在 Bugzilla 中),这会引发错误。

两个可能的修复:

  • 停止使用 new String(),当将文字字符串分配给变量时将自动创建一个新字符串。
  • 使用 username.toString() 自行强制转换,您需要对所有文本字段执行此操作。

附言:

您可能不应该使用 Unicode 变量名,尽管它可以用于 javascript。但是看起来很奇怪。而这个问题的实际名称应该是FormData doesn't work with String on Firefox

关于javascript - FormData 不适用于 Firefox 上的 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762424/

相关文章:

html - 带有应用边框半径的虚线边框在 Firefox 中长度错误

javascript - 如何拆分 JS 参数并忽略\'

javascript - Minmax JavaScript 算法返回控制台错误 Uncaught TypeError : Cannot read property 'cost' of undefined

javascript - 将ajax数据返回给不同链接对应的不同函数

javascript - 在 firefox 中将 HTML 表格下载为 excel

css - firefox 侧边栏中的 xul 按钮元素是否可以使用 CSS 进行编辑?

javascript - JavaScript 和 JQuery 中的按键事件?

javascript - 使用jquery获取多个元素的属性值。然后使用它们

javascript - Django-JS : How to display the first PDF page as cover

java - 从 Http 请求中获取内容