4

jquery ajax入力タイプのファイルとテキストを含む通常の入力タイプを使用して投稿を行い、サーブレットからそれらを取得しようとしていますrequest.getParameter("element_name")が、Chrome インスペクターを使用すると、送信している FormData のオブジェクトにファイルとテキスト値が含まれていることがわかります、何らかの理由servletでパラメーターを読み取っています。null

これは私が持っているフォームです: (ticket_id は別の jsp から正常に返されます)

<form id="upload-form" action="upload" enctype="multipart/form-data" method="post">
    <input id="attach-btn" type="file" name="uploadedFile" style="display:none"/>
    <input id="tick-id-upload" type="hidden" name="ID" value="<%=ticket_id%>" />            
    <input id="submit-form" type="button" style="display:none"/>
</form>

これはjquery ajax post callです:

// use to refresh section on submit of a form
$(document).on('click', '#submit-form', function()
{
    var form_data = null;

    if (drop === false)
    {
        // form data object with ticket id and file
        form_data = new FormData($('#upload-form')[0]);
    }
    else
    {
        // append dropped file and value of id seperately
        form_data = new FormData();
            form_data.append('ID', $('#tick-id-upload').val());
        form_data.append('uploadedFile', dropped_files);
    }

    $.ajax(
    {
       url: $('#upload-form').attr('action'),
       type: 'POST',
       async: true, 
       xhr: function() // custom XMLHttpRequest
       {
            myXhr = $.ajaxSettings.xhr();

            if (myXhr.upload)
            { // check if upload property exists
                myXhr.upload.addEventListener('progress', show_progress, false); // for handling the progress of the upload
            }
            return myXhr;
       },
       dataType: 'html', // the data type to be returned
       success: function(response, status, xhr)
       { 
            $('#progressbar').hide();

            if (xhr.getResponseHeader('duplicate') === 'true')
            {
                // file is duplicate.. display dialog box
            setTimeout(function()
            {
                   $('#trigger-dialog').trigger('click');
            }, 10);     
            }
            else
            {
                // replace attachments section by section in response
                    $('#attachments').html($(response).find('#attachments').html());  
                    execute_attach_datatable();
                    switch_to_view();

                    init_progress_bar();
                    override_section_height();
                }
            },   
            error: function(xhr, status, error) 
            {
                alert(xhr.responseText);
            },
            data: form_data , // what data to pass
            cache: false,
            contentType: false,  // type of data to be sent
            processData: false
        }); 
    });

これは、サーブレットのdoPostメソッドで行うことです。

int ticket_id = Integer.parseInt(request.getParameter("ID"));

NullPointerExceptionChrome の [ネットワーク] セクションから見たように、データは送信されていますが、この行は a を返しています。

入力タイプのテキストを送信せずにファイルをアップロードしても問題ないことに注意してください。tick-id-uploadつまり、要素のない同じフォームがあり、同じjquery ajax呼び出しを使用すると、ファイルは正常にアップロードされます。

何が起こっているかについてのアイデアはありますか?どうもありがとう!

4

1 に答える 1