web-dev-qa-db-fra.com

Comment puis-je traiter le fichier XML lors du téléchargement?

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'.

2
D.Sc.

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');
            }
        });
    });
0
D.Sc.