【发布时间】:2016-08-14 12:20:40
【问题描述】:
我在前端表单中使用带有 ajax 的 wordpress,我需要支持处理和上传特色图片。我的问题特别是关于特色图片。我的 html 是这样的:
<form id="msform" action="#" method="post" enctype="multipart/form-data">
//inputs of various nature
<input type="file" name="main_image" id="main_image" multiple="false" value="" accept=".png, .jpg, .jpeg, .gif"/>
<input type="submit" class="submit" value="Publish"/>
</form>
我通过这个 jquery 将数据发送到一个 php 函数(遵循 Wordpress 方法):
function apfaddpost() {
var formData = $('#msform').serialize();
formData.append('main_image', $('#main_image')[0].files[0]); //here should be the problem
jQuery.ajax({
type: 'POST',
url: apfajax.ajaxurl,
data: formData + '&action=apf_addpost', //here I send data to the php function calling the specific action
processData: false,
contentType: false
success: function(data, textStatus, XMLHttpRequest) {
var id = '#apf-response';
jQuery(id).html('');
jQuery(id).append(data);
resetvalues();
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
我的函数php类似于
function apf_addpost() {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
$file_handler = 'main_image';
$attach_id = media_handle_upload($file_handler,$pid );
update_post_meta($pid,'_thumbnail_id',$attach_id);
}
重要的是:标题、描述、标签等所有其他数据都已正确序列化和发送。问题在于图像。我也尝试过使用$_FILES[] 处理程序但没有成功,我想我的ajax 代码那时不是很好。你能帮助我吗?如果您对此问题有任何其他解决方法,请分享!提前致谢。
[已解决] 编辑
感谢下面的答案,我刚刚将我的 ajax 更改为
function apfaddpost() {
var fd = new FormData($('#msform')[0]);
fd.append( "main_image", $('#main_image')[0].files[0]);
fd.append( "action", 'apf_addpost');
//Append here your necessary data
jQuery.ajax({
type: 'POST',
url: apfajax.ajaxurl,
data: fd,
processData: false,
contentType: false,
success: function(data, textStatus, XMLHttpRequest) {
var id = '#apf-response';
jQuery(id).html('');
jQuery(id).append(data);
resetvalues();
},
error: function(MLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
}
我发现FormData() 允许序列化文件,而.serialize() 方法则不允许。众所周知,继续前进很简单。
谢谢。
【问题讨论】:
标签: php jquery ajax wordpress image-processing