Ich muss eine XML-Datei verarbeiten, nachdem sie ein Administrator im WordPress-Backend hochgeladen hat.
1) Ich habe das Formular erstellt:
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) Ich sende das Formular per Ajax an meine Funktion:
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) Ich möchte seinen Inhalt ausgeben:
add_action( 'wp_ajax_calculate_xml', 'calculate_xml' );
function calculate_xml() {
$xmlfile = $_POST['xmlfile'];
print_r(simplexml_load_file($xmlfile));
wp_die();
}
Es scheint jedoch nicht zu funktionieren. Meine Antwort gibt nichts zurück, außer meinem Teststring 'ok'.
Ich habe mein Problem mit vielen, vielen Tests gelöst. Anscheinend war mein FormData-Objekt nicht korrekt. Die folgenden Änderungen an meinem Code haben funktioniert:
$('#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');
}
});
});