web-dev-qa-db-ja.com

アップロード時にxmlファイルを処理する方法

管理者がワードプレスバックエンドでそれをアップロードした後、私はXMLファイルを処理する必要があります。

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'を除いて、私の応答は何も返しません。

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