2017-04-19 14 views
1

私はいくつかのイベントバインドを同じ関数にする必要があります。できるだけコードを単純化しようとします。jqueryプロキシで問題が発生しました

これは、結合、私のイベントです:

$(".preset").on("submit",$.proxy(submit_preset,this,"create")); 

これは私がAnnonymousの$(".preset").on("submit",function(){ etc });ようにそれを行う場合に動作機能である:私は間違っ

function submit_preset(e, url){ 
     e.preventDefault(); 
     var _formdata=new FormData(($(e)[0].target)); //don't mind this weird $(e)[0].target 
     $.ajax({ 
      url:url, 
      data:_formdata, 
      type:'post', 
      success:function(datapass){ 
       console.log(datapass); 
      } 
     }); 
    } 

何をしているのですか?関数のパラメータまたはプロキシのパラメータは?または、他の何か?

ポストアンサー:関数の内容が何かを見逃している可能性がありますが、問題は直感的にわかりませんでしたが、パラメータを入れ替えなければなりませんでした。答えとコメントのjsfiddleもチェックしてください。 :)あなたはそれが提起されたイベントを指して、そのform要素、ないeを参照するためにthisを使用する必要があるため、$.proxyを使用してformsubmit_preset()機能の範囲を設定している

+0

あなたは( '$ .proxy')結合そのイベントに、この関数' submit_preset'を呼び出すことができますか? –

+0

はい、関数内で警告( "テスト")を試みました。フォームを送信すると、警告が表示されます – Cr1xus

答えて

2

。あなたがバイナリデータを送信し、パラメータの順序を入れ替えているよう

はあなたのコードを修正するには、あなたがFormData()コンストラクタにthisを提供する必要があり、falsecontentTypeprocessDataを設定する - あなたがイベントに追加のデータが最初に来ます。これを試してみてください:

function submit_preset(url, e) { 
    e.preventDefault(); 

    $.ajax({ 
    url: url, 
    type: 'post', 
    data: new FormData(this), 
    contentType: false, 
    processData: false, 
    success: function(datapass) { 
     console.log(datapass); 
    } 
    }); 
} 

Working example

+0

こんにちは、回答ありがとう、processDataとcontentTypeが含まれていました。それをもっと短くしてください。しかし、** url **パラメータは、私がそれを警告しようとしたために機能しません。また、私の動作はGETメソッドと同じページになります。 – Cr1xus

+0

''作成する ''あなたは呼び出しようとしているURLですか? –

+0

はい、ルーティングでlaravelを使用しています – Cr1xus

関連する問題