2017-04-19 1 views
1

같은 기능으로 여기 저기에 몇 가지 이벤트 바인딩을 수행해야합니다. 가능한 한 코드를 간소화하려고 노력할 것입니다. jquery 프록시에 문제가있는 경우

내 이벤트는 구속력 :

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); 
      } 
     }); 
    } 

내가 잘못을하고있는 중이 야 무엇 :

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

이 나는 ​​그것이 annonymous $(".preset").on("submit",function(){ etc });로하는 경우에 작동하는 기능은? 함수 매개 변수 또는 프록시 매개 변수? 또는 다른 것?

답 : 함수 내용에 뭔가 빠졌을 수는 있지만 문제점은 직감적이었습니다. 매개 변수를 교환해야했습니다. 답과 댓글에 대한 jsfiddle도 확인하십시오. 당신은 $.proxy를 사용하여 formsubmit_preset() 기능의 범위를 설정하는

+0

당신은 바인딩 해당 이벤트 ('$ .proxy')이 함수'submit_preset'를 호출 할 수 있습니까? –

+0

예, 함수에서 경고 ("테스트")를 시도했는데 양식을 제출하면 경고가 나타납니다. – Cr1xus

답변

2

: 그러므로 당신이 참조 할 this를 사용할 필요가 제기 된 이벤트를 참조로 form 요소하지 e, 그. 바이너리 데이터를 전송 및 매개 변수의 순서를 교환하고 같이

이 코드를 해결하려면 당신이 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