0

我正在尝试将一些代码从 javascript 转换为 jquery。

Javascript代码:(我这里有这段代码)

window.onload = function () {
    document.getElementById('uploader').onsubmit = function () {
        var formdata = new FormData(); //FormData object
        var fileInput = document.getElementById('fileInput');
        //Iterating through each files selected in fileInput
        for (i = 0; i < fileInput.files.length; i++) {
            //Appending each file to FormData object
            formdata.append(fileInput.files[i].name, fileInput.files[i]);
        }
        //Creating an XMLHttpRequest and sending
        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/Home/Upload');
        xhr.send(formdata);
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                alert(xhr.responseText);
            }
        }
        return false;
    }
}

JQuery 代码:(根据我的应用程序)

 $('#AutoUploadFiles').click(function () {

        var formdata = new FormData();
        var fileInput = $("#AutomaticUploader");

        for (var i = 0; i < fileInput.get(0).files.length; i++) {
            formdata.append(fileInput.get(0).files[i].name, fileInput.get(0).files[i]);
        }

        $.ajax({
            url: '/members/AutoUploadFile',
            type: 'post',
            data: formdata,
            success: function () {

            },
            error: function () {

            }
        });
    });

当我尝试执行上述 JQuery 代码时,在 jquery.min.js 文件中出现“非法调用”错误。

我是 Web 编程新手,所以在转换为 JQuery 时可能会犯一些错误。如果有人发现一些错误,请指导我。

4

2 回答 2

1

问题是它formdata是一个对象,不能序列化为普通字符串

  var formdata = new FormData();

在你的代码中

type: 'post',
data: formdata, //<-- this is the problem
success: function () {

formdata 必须作为有效的 json数据进行序列化,否则无法发送,$.ajax()这就是您的 jquery 版本无法正常工作的原因。请尝试其他 jquery 上传脚本,因为 google 中有很多

于 2013-09-20T10:23:17.353 回答
1

如果您通过 XHR 发送文件,则接受的答案不起作用,因为文件对象不能进行 JSON 编码。唯一的“解决方法”是禁用 jQuery 的 XHR 数据处理。

要全局禁用它,请使用

$.ajaxSetup({processData:false});

或者做

$.ajax({
  ... Ajax Stuff Here,
  processData: false
});

在每个请求上。

于 2014-08-07T14:03:32.377 回答