我需要在管理员将XML文件上传到wordpress后端后处理它。
1) 我创建了表单:
function x_show_settings_page(){
?>
<form method="post">
<table class="form-table">
<tr valign="top">
<th scope="row">XML-Datei hochladen</th>
<td><input type="file" name="thirdcolor" id="xmlfile" value="" /></td>
</tr>
</table>
<?php submit_button(\'Hochladen\'); ?>
</form>
<?php
}
2)我通过ajax将表单发送到我的函数:
add_action( \'admin_footer\', \'x_add_settings_js\' );
function x_add_settings_js() { ?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var file_data = jQuery(\'#xmlfile\').val();
var form_data = new FormData();
form_data.append(\'xmlfile\', file_data);
form_data.append(\'action\', \'calculate_xml\');
$.ajax({
url : ajaxurl,
type: "POST",
data : form_data,
processData: false,
contentType: false,
success:function(response){
alert(\'ok\' + response);
},
error: function(response){
alert(\'no\' + response);
}
});
});
</script> <?php
}
3)我想输出其内容:
add_action( \'wp_ajax_calculate_xml\', \'calculate_xml\' );
function calculate_xml() {
$xmlfile = $_POST[\'xmlfile\'];
print_r(simplexml_load_file($xmlfile));
wp_die();
}
然而,它似乎不起作用。我的响应没有返回任何内容,除了我的测试字符串“ok”。
最合适的回答,由SO网友:D.Sc. 整理而成
我通过大量的测试解决了我的问题。显然,我的FormData对象不正确。对我的代码进行以下更改有效:
$(\'#xml\').on(\'submit\', function(e) {
e.preventDefault();
var form_data = new FormData(this);
form_data.append(\'action\', \'calculate_xml\');
$.ajax({
url : ajaxurl,
type: "POST",
data : form_data,
processData: false,
cache: false,
contentType: false,
success:function(response){
$(\'#response\').html(response);
},
error: function(response){
$(\'#response\').text(\'error\');
}
});
});