jQuery,有没有办法将一个FormData的encodeURIComponent?

时间:2016-12-28 15:58:15

标签: jquery ajax

我正在使用此脚本将表单提交转换为ajax提交:

var formData = new FormData($(form)[0]);
        $.ajax({
            type: "POST",
            url: ...myurl...
            data: formData,
            dataType: "json",
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            success: function (data) {
            ...some success code
            }

脚本工作正常,但是像òàè这样的字符被错误编码变成了奇怪的字符。 我想我需要使用 encodeURIComponent 函数,但我不知道如何以及它是否可以在FormData上使用。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

一些参考文献:

https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries

https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries

<form  enctype="multipart/form-data" method="post" name="fileinfo">
  <label>Your email address:</label>
  <input type="email" autocomplete="on" autofocus name="userid" placeholder="email" size="32" maxlength="64" /><br />
  <label>Custom file label:</label>
  <input type="text" name="filelabel" size="12" maxlength="32" /><br />
 <input type="submit" value="Stash the file!" />
</form>

var formTest = document.forms.namedItem("fileinfo");
formTest.addEventListener('submit', function(ev) {

var oData = new FormData(formTest);
var newForm = new FormData();
for(var pair of oData.entries()) {
   newForm.append(pair[0],encodeURIComponent(pair[1])); 
}

for(var test of newForm.entries()) {
   alert(test[0]+ ', '+ test[1]); 
}

ev.preventDefault();
}, false);

https://jsfiddle.net/s35dg34b/

答案 1 :(得分:0)

使用jQuery的serialize方法。它序列化并编码整个表单。

$.ajax({
        type: "POST",
        url: ...myurl...
        data: $(form).serialize(),
        dataType: "json",
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function (data) {
        ...some success code
        }