ajax请求中的formdata返回Uncaught TypeError:非法调用错误

时间:2017-04-29 13:38:30

标签: javascript ajax

我不明白为什么在尝试发送此Ajax请求时出现Uncaught TypeError: Illegal invocation错误

代码:

$( "#order_button" ).on( "click", function() {
    var name = $('#name').val();
    var email = $('#email').val();
    var address = $('#address').val();
    var co_address = $('#co_address').val();
    var city = $('#city').val();
    var image = $('#fileInput').prop('files')[0];

   updateDB(name, email, address, co_address, city, image);
});

    //update database with posted values
    function updateDB(name, email, address, co_address, city, image){
        var formData = new FormData();

        formData.append('image', image);
        formData.append('name', name);
        formData.append('email', email);
        formData.append('address', address);
        formData.append('co_address', co_address);
        formData.append('city', city);

        console.log(formData['name']);

        var data = {
            action: 'det_lilla_extra',
            formData: formData
        };

        $.ajax({
            url: '/wp-admin/admin-ajax.php',
            type: 'POST',
            dataType: 'json',
            data: data,
            success: function (data) {
                console.log("success: " + data);
                $('.block-center').append('<i class="fa fa-check fa-4x" aria-hidden="true">');
                //clearInputfields();
                //successMessage();
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log("jqXHR: " + jqXHR);
                console.log("textStatus: " + textStatus);
                console.log("errorThrown: " + errorThrown);
            }
        });
    }

为什么console.log(formData['name']);会记录undefined?。我知道这里有一些更难以理解的东西。

如果我添加processData: false,那么我会收到一条成功消息。但在我的PHP脚本中,我做了var_dump($_POST)。但没有任何表现!

修改

我的代码现在看起来像:

//update database with posted values
function updateDB(name, email, address, co_address, city, image){
    var formData = new FormData();

    formData.append('action', 'det-lilla-extra');
    formData.append('image', image);
    formData.append('name', name);
    formData.append('email', email);
    formData.append('address', address);
    formData.append('co_address', co_address);
    formData.append('city', city);

    console.log(formData['name']);

    $.ajax({
        url: '/wp-admin/admin-ajax.php',
        type: 'POST',
        dataType: 'json',
        data: formData,
        processData: false,
        success: function (data) {
            console.log("success: " + data);
            $('.block-center').append('<i class="fa fa-check fa-4x" aria-hidden="true">');
            //clearInputfields();
            //successMessage();
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log("jqXHR: " + jqXHR);
            console.log("textStatus: " + textStatus);
            console.log("errorThrown: " + errorThrown);
        }
    });
}

我的php脚本很简单:echo var_dump($_POST);

但我收到的ajax文件只是0为什么会这样?

1 个答案:

答案 0 :(得分:0)

首先,string remoteUri = "https://www.microsoft.com/favicon.ico" WebClient myWebClient = new WebClient(); try { byte[] myDataBuffer = myWebClient.DownloadData (remoteUri); if(myDataBuffer.length > 0) // Or add more validate. eg. checksum { return true; } } catch { return false; } 无效。 FormData不提供任何特殊的订阅支持,因此您只需访问该对象的属性 - 其中不会有formData['name']。您可以使用FormData.get()

其次,你所做的事情没什么意义。您将FormData对象放入一个对象,并将其作为name传递给jQuery。默认情况下,即如果未将data设置为false,jQuery将尝试将processData转换为字符串。你告诉它将给定的对象转换为JSON(data)。但这无法做到。试试这个:

dataType: 'json'

将为您提供一个空对象:var formData = new FormData(); formData.append('test', 'abc'); JSON.stringify(formData); 。这也可能是您收到此错误的原因。

您必须将所有数据作为纯JavaScript对象传递给jQuery,并将其序列化为JSON,或将所有数据放入FormData对象。

E.g。

{}