2012-01-06 16 views
0

JQueryとPHPでフォームを構築していますが、すべてが動作してファイルアップロードを受け入れるようです。 Jsonは$ _FILESが好きではないようです。 javascriptがオフの場合、フォームは正常にアップロードされます。これは既知の問題ですか?それがあれば、回避策はありますか?どのようにJQueryのプラグインがこれを行うことができますか?

ありがとうございました!

のjQuery:

$('#mcContactForm').submit(function(e){ 
    e.preventDefault(); 

    // validate form 
    mcValidateForm(); 

    // serialize and submit form data 
    $('.mcloading').show(); 
    var mcFormData = $(this).serialize(); 
    mcSubmitForm(mcFormData); 

    // ----------------------------------------------- 
    // AJAX FORM SUBMIT 
    // ----------------------------------------------- 
    function mcSubmitForm(mcFormData){ 
     $.ajax({ 
      type: 'POST', 
      url: 'contact.php', 
      data: mcFormData, 
      dataType: 'json', 
      cache: false, 
      timeout: 7000, 
      success: function(data) { 
       if(data.error === true){ 

        ... 
       } 
       else if(data.error === false){ 

        ... 
       } 
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown) { 
       alert(errorThrown); 
       ... 
      },    
      complete: function(XMLHttpRequest, status) { 
       ... 
      } 
     }); 
    } 
}); 
+3

あなたのコードはおそらくわかりますか? :) wourld本当に助けて – Deleteman

+1

私はちょうどserialize()はファイル入力フィールドを提出しないことを読んでいます。それが問題の核心です。このための回避策はありますか? – user1002039

+0

@ user1002039、はい、回避策は、ajaxを使用する代わりに非表示のiframeフィールドに送信することです。これを行う多くのクエリプラグインがあります。私の答えを見てください。 –

答えて

2

それは多分あなたは、AJAX経由でファイルをアップロードしようとすると、これは単に通常のAJAXを経由して戻ってフォームパラメータを送信することにより行うことができないことを発見しているように聞こえますか?その場合、必要なのはajaxファイルアップロードプラグインです。いくつかの可能性についてはこちらをご覧ください:

http://www.webdeveloperjuice.com/2010/02/13/7-trusted-ajax-file-upload-plugins-using-jquery/

これらは通常、アップロードを行うために隠されたのiframeに提出するシステムを使用しています。

+0

ありがとう!非表示のiframe送信を行う方法に関するチュートリアルはありますか?私はそれがどういう意味なのかよく分からない。私はプラグインに対して何もしていないが、これがどのように行われているかを知りたい。 – user1002039

+0

よく隠されたiframeの提出は完全に単純ではないので、そのためにプラグインをお勧めします。しかし、基本的には、 "display:none"スタイルのiframeを作成することです(ユーザはそれを見ることができません)。そして、フォームの 'target'属性をフレームの名前に設定します。これは、それがそのフレームにあるかのように*送信します。その後、iframe内のいくつかの詳細に基づいてアップロードが完了したときにキャッチするjavascriptイベントハンドラを設定し、iframeを親に送ってプロセスを終了させます。 –

+0

概念的には単純ですが、それは実際には難しいプロセスです。プラグインを使うと、コードの1行ですべてのことを行えるようになります。 –

関連する問題