web-dev-qa-db-de.com

Wie kann ich eine XML-Datei beim Hochladen verarbeiten?

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

2
D.Sc.

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