2011-01-06 1 views
7

formtastic을 사용하여 생성 된 양식이있는 레일스 애플리케이션을 개발 중입니다. localhost : 3000 w/Ruby-1.9.2, Rails-3.0.1, jQuery 및 AJAX에서 로컬로 테스트하는 &을 테스트 중입니다.레일 3 : 양식을 두 번 제출하는 것

다음은 내가 보는 문제의 화면 출력 예입니다. 내 양식이 서로 1 초 내에 두 번 제출됩니다. 왜 이런 일이 일어나는 지 이해할 수 없습니다. 나는이 문제가 GET을 포함하여 모든 요청으로 볼 수 있습니다.

  1. 는 POST 시작 "/ 기업/6/edit_balance"JS 파라미터 등 2011-01-07 0,530 2시 31분 47초 처리 의해 BusinessesController #의 edit_balance 127.0.0.1에 대한 { " UTF8 "=>"✓ " "authenticity_token "=>"이 zcWH08sV8kPbAYy7JQX64Cu2e1i이/kEB1AB4x5a08CO8 = "

  2. 는 POST 시작"/ 사업 2011-01-07 2시 31분에서 127.0.0.1에 대한/6/edit_balance " 48 +0530 처리 중 BusinessesController # edit_balance as JS 매개 변수 : { "UTF8"=> "✓" "authenticity_token"=> "zcWH08sV8kPbAYy7JQX64Cu2e1i/kEB1AB4x5a08CO8 ="

그리고 기본적인 프로그래밍 오류를 만드는 중이라서인지 너무 궁금하고있다. 그렇다면, 시도해 볼 수있는 해결책을 제시해주십시오.

+1

보기 파일 – apneadiving

+0

을 제공해주세요.이 문제를 해결할 수 있습니까? 나는 현재 같은 문제가있다 – pduersteler

답변

1

양식을 자바 스크립트와 함께 제출하는 경우 양식을 제출할 때 제출 버튼을 사용하지 않도록 설정하십시오. PolarBlau이 .. 나에게 당신의 제안을 해보자

$('form').submit(function(){ 
    $(this).find(input[type='submit']).attr("disabled", "true"); 
    ... // submit form via AJAX 
    return false; 
}); 
+0

폼.attr ("action", ...)은 양식의 "action"속성 만 설정하므로 양식을 제출할 위치를 결정하지만 실제로 양식을 제출하지는 않습니다. – polarblau

0

감사합니다 ..

Apnediving : 다음 1. 양식을 작성하는 것이 코드의 비트 (이다 jQuery로는 (테스트하지)이 같은 것 양식 부분) 2. 양식을 포함하는 대화 상자 정의 (대화 상자 부분) 3. 양식에 조치를 첨부하는 JS.

양식 부분 (credits_form)

- f.inputs :name => 'Edit Credits' do 
    = f.input :numeric_input_1, :label => 'Amount', :as => :select, :collection => [1000,2000,3000] 
    = f.input :boolean_input_1, :label => 'Add Credits' 
    = f.commit_button :label => 'Submit' 

대화 부분

# 편집 - 학점 - 대화

- @user_input = UserInput.new

= semantic_form_for @user_input, :remote => true do |f|  
= render :partial => 'businesses/credit_form', :locals => {:f => f} 

JS 코드

+0

제출 단추를 비활성화하면 작동하지 않는 것 같습니다. 모든 클릭 한 번에 2 개의 POST 요청이 계속 표시됩니다. – Abhinav

+0

제출 단추를 사용 불가능하게하는 것이 작동하지 않는 것 같습니다. 모든 클릭 한 번에 2 개의 POST 요청이 계속 표시됩니다. 브라우저가 첫 번째 확인을받지 못하여 두 번째 요청이 발생할 수 있습니까? 또한 컨트롤러에서 respond_to 블록을 제거하고 그냥 render : json으로 바꿨다는 것을 알았습니다. respond_to가 중요하고 중복 처리를 방지 할 수 있습니까? 위의 두 가지 가능성 중 어느 것도 해당되지 않으면 세 번째 아이디어가 없기 때문에 나는 망했다. – Abhinav

+2

좋아, 알아 냈어. 내 자바 스크립트 파일에 문제가있다. 동일한 객체에 동일한 '클릭'이벤트를 두 번 바인딩했습니다. 그리고 분명히 - jQuery-1.4.2부터 시작할 수 있습니다. 현재 나는 $ (obj) .unbind ('click', handler) .bind ('click', handler)를 수행하여 문제를 우회하고있다. 그러나 나는 내 앞에서 코드를 재구성하는 밤을 보낸다. 모두에게 그들의 입력에 대한 감사합니다 – Abhinav

8

Heroku에 배포 한 직후에도 똑같은 문제가있었습니다 ... 자산을 미리 컴파일했는데 갑자기 이중 AJAX를 제출하게되었습니다. 나는 어떻게 든 public/assets에서 중복되는 javascript 파일로 끝났다고 생각한다.

문제를 해결하기 위해 방금 공개/자산 디렉토리 전체를 삭제했습니다.

+1

아미르, 감사합니다. 아타 가온! 애셋을 미리 컴파일하여 시도했는데 작동하지 않았습니다. 하지만 단순히 공개/자산 디렉토리를 삭제하면 효과가있었습니다! 감사! (그냥'rm -r public/assets /'을 했어요) – mjnissim