2012-11-19 3 views
0

jQuery에서 AJAX 요청으로 채워지는 원격 양식이 있습니다. 그런 다음이 양식을 AJAX 콜백에 바인딩하고 있지만 콜백이 트리거되지 않습니다.Rails 3 원격 양식이 콜백을 트리거하지 않음

var msgSuccess=function(evt, data, status, xhr){ 
    alert('ok!!!'); 
    console.log(evt); 
    console.log(data); 
    console.log(status); 
    console.log(xhr); 
} 

var bindMsg = function() { // BIND IT TO THE CALLBACKS 
    $("#composeMsgPopup") 
    .live('ajax:beforeSend', loadingCallback) 
    .live('ajax:success', msgSuccess) 
    .live('ajax:error', failureCallback) 
    .live('ajax:complete',completeCallback); 
} 

$.ajax({  // GETTING THE FORM CODE 
    url: link, 
    type: "get", 
    success: function(response, textStatus, jqXHR) { 
    ans=response; 
    $("#popup_content").html(ans); 
    $("#popup").bPopup(); 
    bindMsg(); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
    failureCallback(errorThrown, textStatus, jqXHR); 
    }, 
    complete: function(jqXHR, textStatus) { 
    completeCallback("", jqXHR, textStatus); 
    }, 
    beforeSend: loadingCallback 
}); 

형태의 코드는 :

<%= form_for(:conversation, :remote => true, 
:url=> {:controller=>:conversations,:action=>:create}, 
:html=>{:id => 'composeMsgPopup' }) do |f| %> 
<div id="founder-name" class="field"><b>Recipient: <%= @user.name %></b></div> 
<div class="field"> 
    <%= f.label :subject,"Subject" %> 
    <%= f.text_field :subject,:class=>"composeMsgField" %> 
</div> 
<div class="field"> 
    <%= f.label :content,"Message Content" %> 
    <%= f.text_area :content,:class=>"composeMsgField" %> 
</div> 
<%= f.hidden_field :to_user, :value => @user.id %> 
<%= f.submit "Send", :class=>"submitbt",:id=>'sendMessage' %> 
<% end % > 

I가 바인드() 또는 함께 결합하는 시도()하지만이 작동하지 않습니다. 코드가 실행되지만 양식을 제출하면 콜백이 실행되지 않습니다.

+0

이 왜 호출하는 양식을 제출 버튼을

 <%= f.button :submit, "Update",:class=>"submitbt",:id=>"submitnewpass",:onclick=>"return false;" %> 

와 바인딩 : 알 수없는 이유에 대한 콜백을 트리거하지 원격 형태는, 그래서 내가 무슨 짓을하는 것은 변경 버튼 동작을 제출하다 bindMsg() AJAX 성공 부분에? AJAX 요청은 비동기식이며 bindMsg()를 늦게 호출하면 작동하지 않을 것이라고 생각합니다. 또한, bindMsg()에 코드를 추출 할 필요가 없다고 생각합니다. 코드를 AJAX 호출의 성공 부분에 직접 넣으십시오. 당신은 나중에 그것을 리팩터링 할 수 있습니다 - 모든 것이 작동 한 후에 ... – awenkhh

+0

나는 그것을 변경했습니다. – Dima

+0

및 양식 코드가 아약스 응답 있기 때문에 바인딩이 필요합니다. – Dima

답변

1

확인 해결책을 찾았습니다. 수동으로

var action=$('#composeMsgPopup')[0].action; // action url 
$("#sendMessage").click(function() {   // bind submit button 

    $.ajax({ 
     type: "POST", 
     url: action, 
     data: $("#submitnewpass").serialize(), // serializes the form's elements. 
     success: function(data) 
     { 
      // do my stuff 

     }, 
     error:  failureCallback, 
     beforeSend: loadingCallback, 
     complete: completeCallback 
    }); 

    return false; 
}); 
관련 문제