我正在尝试使用AJAX上传文件,我正在挂接我的函数,以便在admin AJAX中调用它们。我不能让它工作得很艰难,我也不知道到底出了什么问题,也不知道该去哪里看。然而,我通过修改管理ajax缩小了范围。php一点:
// Require an action parameter
if ( empty( $_REQUEST[\'action\'] ) ) {
$response = array(
\'error\' => \'no action parameter\',
\'req\' => var_export( $_REQUEST, true )
);
wp_send_json( $response );
wp_die( \'0\', 400 );
}
我的AJAX请求中有数据类型:“json”,因此会调用我的success函数(如果我删除$response声明和对wp\\u send\\u json的调用,则会调用错误一,将整个页面作为响应返回,状态文本为“parserror”)。
总之,下面是我的AJAX脚本:
$( \'#user-file\' ).change( function( event ) {
var formData = new FormData();
formData.append( "userfile", $(this)[0].files[0] );
formData.append( "action", "vibesoft_files_upload" );
formData.append( "_wpnonce", vbsoft.nonce_upload );
console.log( formData );
$.ajax({
type: "post",
url: vbsoft.ajax_url,
data: formData,
contentType: "multipart/form-data",
processData: false,
dataType: \'json\',
success: function( data ) {
if ( data.error != \'none\' ) {
console.log( \'Error: \' + data.error );
console.log( \'Request: \' + data.req );
return;
}
它不是整个函数,它被包装在
(function($) { ... })(jQuery);
所以我可以用$代替jQuery。这个
console.log( \'Request: \' + data.req );
输出:
Request: array(
)
我还尝试输出$\\u POST和$\\u文件,它们也是空数组。如果我使用(而不是JSON返回)返回它们:
var_dump( $_REQUEST );
exit;
我明白了
array(0) {}
回到控制台。
所以,是的,我不知道为什么我得到一个空数组。。。
SO网友:Tom J Nowell
问题是:
var formData = new FormData();
formData.append( "userfile", $(this)[0].files[0] );
formData.append( "action", "vibesoft_files_upload" );
formData.append( "_wpnonce", vbsoft.nonce_upload );
console.log( formData );
$.ajax({
type: "post",
url: vbsoft.ajax_url,
data: formData,
具体而言:
var formData = new FormData();
jQuery文档中没有这样说
data
接受
FormData
对象的
data
参数:
数据类型:要发送到服务器的纯对象或字符串或数组数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到GET请求的url中。请参阅processData选项以阻止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery将基于传统设置的值(如下所述)用相同的键序列化多个值。
https://api.jquery.com/jQuery.ajax/
解决方案是使用对象,例如:
var formData = {
"userfile": $(this)[0].files[0],
"action": "vibesoft_files_upload",
"_wpnonce": vbsoft.nonce_upload
};
请记住,如果您使用了更简单的REST API,并指定了所需的字段,那么API会直截了当地告诉您问题所在以及缺少哪些字段。REST API更易于使用,所遇到的问题和挂起的问题要少得多
因此,已经有了一个核心端点,它可能能够完成您想要做的事情,请参见https://developer.wordpress.org/rest-api/reference/media/