2017-04-05 8 views
0

おはようございます、フォームデータajaxで複数のファイルをアップロードしてテキストフィールドと一緒に

私はフォームに複数のフィールドがあります。また、フォームはajaxを使用してフォームデータメソッドを介してPHPファイルに送信されています。

以下は、フォームデータを送信するjavascriptコードです。

$(".update").click(function(){ 

     $.ajax({ 
     url: 'post_reply.php', 
     type: 'POST', 
     contentType:false, 
     processData: false, 
     data: function(){ 
      var data = new FormData(); 
      data.append('image',$('#picture').get(0).files[0]); 
      data.append('body' , $('#body').val()); 
      data.append('uid', $('#uid').val()); 
      return data; 
     }(), 
      success: function(result) { 
      alert(result); 
      }, 
     error: function(xhr, result, errorThrown){ 
      alert('Request failed.'); 
     } 
     }); 
     $('#picture').val(''); 
$('#body').val(''); 
}); 

そして、以下の実際のフォームです:

<textarea name=body id=body class=texarea placeholder='type your message here'></textarea> 
<input type=file name=image id=picture > 
<input name=update value=Send type=submit class=update id=update /> 

このフォームと、彼らがそうであるようにJavaScriptの作業良いです。しかし、この1つのtype = fileフィールド属性を使用して複数のファイルをphpファイルにアップロードできるようにしようとしています。今のように、一度に1つのファイルしか取ることができません。複数のファイルのアップロードを処理できるように、フォームとJavaScriptコードの両方を調整するにはどうすればよいですか?

ご協力いただければ幸いです。

ありがとうございます!

答えて

0

ここにアクセスできるajax、html、php globalがあります。それがあなたのために働くかどうか私に教えてください。

// Updated part 
jQuery.each(jQuery('#file')[0].files, function(i, file) { 
    data.append('file-'+i, file); 
}); 

// Full Ajax request 
$(".update").click(function(e) { 
    // Stops the form from reloading 
    e.preventDefault(); 

     $.ajax({ 
     url: 'post_reply.php', 
     type: 'POST', 
     contentType:false, 
     processData: false, 
     data: function(){ 
      var data = new FormData(); 
      jQuery.each(jQuery('#file')[0].files, function(i, file) { 
       data.append('file-'+i, file); 
      }); 
      data.append('body' , $('#body').val()); 
      data.append('uid', $('#uid').val()); 
      return data; 
     }(), 
      success: function(result) { 
      alert(result); 
      }, 
     error: function(xhr, result, errorThrown){ 
      alert('Request failed.'); 
     } 
     }); 
     $('#picture').val(''); 
$('#body').val(''); 
}); 

更新HTML:

<form enctype="multipart/form-data" method="post"> 
    <input id="file" name="file[]" type="file" multiple/> 
    <input class="update" type="submit" /> 
</form> 

さて、PHPで、あなたがあなたのファイルにアクセスできるようにする必要があります

// i.e.  
$_FILES['file-0'] 
+0

は実際には、しかし、1つの若干の問題で動作するようです。コンピュータからファイルを選択し、送信ボタンを押すと、アラート機能は機能しますが、ブラウザはリロードされているようです。また、読み込み中のアイコンが回転しています。送信ボタンをクリックすると、そのファイルがPHPファイルに送信され、警告ボックスが表示されます。ブラウザの更新ボタンを押すと、情報を再送信するかどうか尋ねられません。現在、ブラウザは私に再提出したいかどうか尋ねます.....修正する方法は? ..ボタンがクリックされたとき、私はブラウザの読み込みを一切しません。 – maraj

+0

私は自分の答えを更新しました。今は大丈夫です。フォームの再ロードを防ぐには、 'function(e)'と 'e.preventDefault();'のようにイベントパラメタを関数に追加する必要があります。更新された回答をご覧ください。 – loelsonk

+0

@loelsonkブラウズされた複数のファイルを保存するためにあなたのリンクをたどりました。私はシステムから1つ以上のファイルを選んで、関数内のテキストに以下のような警告を出しました:jQuery.each(jQuery( '#file')[0] .files、function(i、file){ data.append + i、file); }); しかし、警告は1回だけです。最後に閲覧したファイルのみを保存することができます。閲覧したファイルをすべて保存するにはどうすればいいですか? –

0

ここでは別の方法があります。

は、あなたのHTMLと仮定すると、このようなものです:あなたはPHPの配列としてファイルにアクセスすることになる、我々は[]を使用しているのであなたは単に

$("#theform").submit(function(e){ 
    // prevent the form from submitting 
    e.preventDefault(); 
    $.ajax({ 
     url: 'post_reply.php', 
     type: 'POST', 
     contentType:false, 
     processData: false, 
     // pass the form in the FormData constructor to send all the data inside the form 
     data: new FormData(this), 
     success: function(result) { 
      alert(result); 
     }, 
     error: function(xhr, result, errorThrown){ 
      alert('Request failed.'); 
     } 
    }); 
    $('#picture').val(''); 
    $('#body').val(''); 
}); 

を行うことができ

<form id="theform"> 
    <textarea name="body" id="body" class="texarea" placeholder="type your message here"></textarea> 
    <!-- note the use of [] and multiple --> 
    <input type="file" name="image[]" id="picture" multiple> 
    <input name="update" value="Send" type="submit" class="update" id="update"> 
</form> 

<?php 
print_r($_POST); 
print_r($_FILES['image']); // should be an array i.e. $_FILES['image'][0] is 1st image, $_FILES['image'][1] is the 2nd, etc 
?> 

詳細情報:

+0

私はコードをテストしました。私は、ファイルがいつ提出されているかを検出するphpファイルを持っています。ここに問題があります:私は0ファイルを選択すると、phpファイルは、ファイルを持っていると言います。私は1ファイルを選択すると、それはファイルを受け取ったと言います。そして、2つのファイルを選択すると、送信ボタンをクリックした後、ページが更新され、フォームデータがクリアされます。どうした? – maraj

+0

これは、ボタンがフォーム内の 'type =" submit "ボタンであるためです。つまり、デフォルトでボタンをクリックすると、フォームが送信され、ページがリロードされます。あなたはそれを避けたいです。私の編集、特にHTMLとJSのコードをチェックしてください。ボタンへの 'onclick'イベントハンドラとは反対のフォームに' onsubmit'イベントハンドラを付けていることに注目してください。 – Mikey

関連する問題