我不明白为什么在尝试发送此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
为什么会这样?
答案 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。
{}