2017-05-09 5 views
1

フォーム内に<s:file>というタグがあります。フォームの提出(フォームの送信など)でフォームを送信すると、すべてがアクションメソッドで正常に動作します。私は自分のコードを変更するときしかし、:バックエンドで

$.ajax({ 
    url: "actionClass!actionMethodA.action", 
    type: "POST", 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
       alert('Error ' + textStatus); 
       alert(errorThrown); 
       alert(XMLHttpRequest.responseText); 
      }, 
    data: $(form).serialize(), 
    success: function(data) { 
       ... 
      } 
}); 

fileフィールドは常にnullです。

ファイルフィールドは(セッターとゲッターと)次のようにアクションクラスで定義されます。ファイルのフィールドは、もはやで正しく設定されていないことができるようになりましフォームがシリアライズされているので

private File impFileUrl; 

がそれですバックエンド?

+0

の可能性のある重複(http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously) –

答えて

1

jQuery.serialize()は、入力要素のみをシリアル化し、その中のデータはシリアル化しないためです。

"成功したコントロール"のみが文字列にシリアル化されます。 No ボタンを使用してフォームが送信されなかったため、ボタンの値がシリアル化されました。シリアル化された 文字列にフォーム要素の値を含めるには、要素にname属性が必要です。 のチェックボックスとラジオボタン(「ラジオ」または「チェックボックス」タイプの入力)の値は、チェックされている場合にのみ に含まれます。 ファイル選択要素のデータが にシリアライズされていません。

ただし、ajaxでファイルをアップロードすることはできません。追加機能やプラグインを使用してFormData objectを送信することもできます。

あなたは右のオプションを設定した場合は、また、jQueryを使って FormDataを使用することができます

:[?私は非同期にファイルをアップロードするにはどうすればよい]

var fd = new FormData(document.querySelector("form")); 
fd.append("CustomField", "This is some extra data"); 
$.ajax({ 
    url: "actionClass!actionMethodA.action", 
    type: "POST", 
    data: fd, 
    processData: false, // tell jQuery not to process the data 
    contentType: false // tell jQuery not to set contentType 
}); 
関連する問題