2017-05-03 18 views
1

对不起,因为标题不正确。我不明白为什么我在wordpress的AJAX请求中出现Uncaught TypeError: Illegal invocation错误。非法调用错误(如果processData未设置,并且找不到操作处理程序,如果设置)对wordpress中的ajax请求

此代码作品

JS

function updateDB(){ 
    $.ajax({ 
     url: '/wp-admin/admin-ajax.php', 
     type: 'POST', 
     data: { 
      action: 'det_lilla_exta 
     }, 
    }); 
} 

PHP(服务器脚本)

<?php 

add_action('wp_ajax_det_lilla_extra', 'det_lilla_extra'); 
add_action('wp_ajax_nopriv_det_lilla_extra', 'det_lilla_extra'); 
function det_lilla_extra(){ 

    echo "hi"; 

} 

但如果我改变我的JS(以后可以通过发送图片fromdata object)

JS

function updateDB(){ 
    var formData = new FormData(); 
    formData.append('action', 'det-lilla-extra'); 
    $.ajax({ 
     url: '/wp-admin/admin-ajax.php', 
     type: 'POST', 
     data: formData, 
    }); 
} 

然后我得到了Uncaught TypeError: Illegal invocation错误。我做了一些googleing,发现为了防止你的数据被转换成字符串,你应该把processData参数设置为false。像做此:

function updateDB(){ 
    var formData = new FormData(); 
    formData.append('action', 'det-lilla-extra'); 
    $.ajax({ 
     url: '/wp-admin/admin-ajax.php', 
     type: 'POST', 
     data: formData, 
     processData: false 
    }); 
} 

但现在我只能从我的WordPress的PHP脚本收到0这意味着它无法找到我的action处理器。

所以我不知道该怎么做。或者什么是错误的。有任何想法吗?

(我可能在这里有一些轻微的语法错误,因为我没有复制粘贴我的代码,但我做了而不是在我的原始代码中有任何与语法相关的错误)。

+0

尝试设置'contentType'参数为** false ** – Wizard

+0

@向导已经尝试过了。不用找了。 – vonhact

回答

0

的问题是,我没有icluding enctype: 'multipart/form-data',

//update database with posted values 
function updateDB(){ 

    var fd = new FormData(); 
    fd.append('action', 'det_lilla_extra'); 
    fd.append('image', $('#fileInput').prop('files')[0]); 

    $.ajax({ 
     url: '/wp-admin/admin-ajax.php', 
     type: 'POST', 
     data: fd, 
     enctype: 'multipart/form-data', 
     contentType:false, 
     processData:false, 
    }); 
}; 

这应该是通过在WordPress Ajax请求发送图像的工作溶液。

+0

我在jQuery $ .ajax中看不到参数'enctype' ...'enctype =“multipart/form-data”'应该放在'

'标签中。 – Wizard

相关问题