Je dois traiter un fichier XML après qu'un administrateur l'a chargé dans le backend wordpress.
1) J'ai créé le formulaire:
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) J'envoie le formulaire via ajax à ma fonction:
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) Je veux sortir son contenu:
add_action( 'wp_ajax_calculate_xml', 'calculate_xml' );
function calculate_xml() {
$xmlfile = $_POST['xmlfile'];
print_r(simplexml_load_file($xmlfile));
wp_die();
}
Cependant, cela ne semble pas fonctionner. Ma réponse ne renvoie rien, excepté ma chaîne de test 'ok'.
J'ai résolu mon problème avec beaucoup, beaucoup de choses à tester. Apparemment, mon objet FormData n'était pas correct. Faire ces changements à mon code a fonctionné:
$('#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');
}
});
});