2010-01-04 5 views
1

문제점 : 각 의견 상자에 '답장'버튼이있는 의견 페이지가 있습니다. 이제 응답 단추에는 jquery 실시간 클릭 바인딩이 있습니다.이 단추를 누르면 트리거 될 때 ajax를 통해 적절한 주석 양식이로드됩니다. 일반적인 필드 외에도 각 양식에는 captcha 입력이 포함되어 있습니다. 양식이 성공적으로 (또는 기타) 제출 후, 난과 같이, 보안 문자를 새로 고침 :Captcha가있는 다중 양식 - Ajax 오류 오류

// submit triggered and form serialized 
$.ajax({ 
type: 'POST', 
url: myaction, 
data: serializedForm, 
cache: false, 
success: function(data, status) { 
    //checks errors from server 
    $servererr = $(data).find('.error_list'); 
    if($servererr.length === 0) 
    { 
     //flash success message... 
     //refresh captcha 
     $thisform.find('.captcha_img_refresh').trigger('click.refresh'); 
    } 
    else { 
     //flash the server errors and then refresh captcha   
     $thisform.find('.captcha_img_refresh').trigger('click.refresh'); 
    } 
}); 

지금은 말하자면, 2 개 개의 다른 동작을 갖는 동일한 페이지 (열려 2 개 신선한 코멘트 (F1 및 F2) 형태를 가지고/post/f1 및 post/f2). f1을 제출하고 오류가보고되지 않았습니다. 그런 다음 두 번째 양식으로 이동하여 모든 유효한 세부 정보를 입력하면 서버에서 captcha 오류가 발생합니다 (위의 else ajax 문이 실행됩니다). 방화 광은 다음을 표시합니다 :

> //for first form 
> POST http://mysite.com/post/f1 302 Found 111ms 
> GET http://mysite.com/post/f1 200 OK 600ms 
> 
> //for 2nd form 
> POST http://mysite.com/post/f2 200 OK 800ms 

왜 이런 일이 발생합니까? 다른 모든 것은 괜찮아 보입니다 (자바 스크립트가 해제 된 상태에서도 양식을 제출하는 데 문제가 없습니다).

양식 HTML :

<form id="comment-form-<unique-number>" class="comment-form-new" action="/post/<separate-action>" method="post" style=""> 
<p>Leave a comment:</p> 
    <ul> 
    <li> 
    <textarea rows="10" cols="71" name="myform[text]" id="myform_text"></textarea></li> 
    <li> 
    <label for="myform_username">Name (required)</label> 
    <input type="text" name="myform[username]" value="Anonymous" id="myform_username" /></li> 
    <li> 
     <label for="myform_email">Email (required)</label> 
     <input type="text" name="myform[email]" value="" id="myform_email" /> 
    </li> 

    <li> 
    <label for="myform_captcha">Please enter code shown below:</label> 
    <input type="text" name="myform[captcha]" id="myform_captcha" /> 
    </li> 
    <li> 
    <img id="captcha_img" src="/mysite/captcha/126263" alt="Captcha Image"> 
    <!-- this refreshes captcha --> 
    <a class="captcha_img_refresh" id="captcha_img_refresh"><img src="/images/reload_original.png" /></a> 
    </li> 
    <input type="hidden" name="myform[comment_id]" value="10" id="myform_comment_id" /> 
    <li> 
    <input type="submit" value="Submit" id="comment-form-submit" /> 
    </li> 
</ul> 

기타 자세한 사항 : 각 주석 양식을로드 한 후, 난 (바인딩 살)이 구속력을 제출할 정상 않습니다. 각 양식의 값은 콘솔 로그를 통해 확인할 수있는 입력란에 일련 화되고 보내집니다. captcha에 Cryptographp 라이브러리 (http://www.captcha.fr/)를 사용하고 있습니다.

답 : 한 양식을 제출 한 후 페이지의 모든 양식에있는 모든 captcha를 새로 고치면 일부 자국은 물론 새로 고침 단추를 다시 클릭하여 사용자가 수정할 수있는 오류 이미지를 표시합니다. 그러나 나는이 대안 이외의 다른 것을 찾고있다.

+0

양식을 설정하는 방법을 보여주는 HTML을 추가 할 수 있습니까? 그러면 문제를 추적하는 데 도움이됩니다. –

답변

1

좋아요 ... 좀 더 많은 테스트를했고, 여기에 내가 (내가 잘못도 될 수있다) 무슨 일이 일어나고 생각입니다 : 보안 문자 이미지 링크, 같은 것입니다 : /내 사이트/보안 문자/(임의의 수)은 각 양식의 서버에서 한 번 생성됩니다. 내가 f1을로드 한 다음 f2를로드하면 f2의 captcha 링크가 기본적으로 f1의 captcha 링크를 null로하는 백엔드에 저장됩니다. 따라서 f1 (여전히 열려 있음)을 제출하면 captcha가 실패합니다.

  1. 한 번
  2. 캐시 captcha를 링크에 하나의 회신 양식을 허용하고 사용자가 해당 양식을
  3. 사용에 초점을 맞출 때 이미지를 재생하기 위해 다시 사용 : 그래서 내가 (프론트 엔드에) 시도 할 수도 있겠죠 위에 언급 된 해결 방법

이 문제를 해결할 백엔드 방법이 있습니까?