2009-10-01 7 views
0

jQuery 유효성 검사 플러그인 및 jQuery 양식 플러그인과 함께 사용되는 원격 유효성 검사 규칙에 문제가 있습니다.jQuery 원격 유효성 검사 경쟁 조건

그래서 jQuery 양식 플러그인을 사용하여 양식 제출을 가로 채고 유효성 검사가 실패하면 양식이 제출되지 않습니다. 그러나 원격 규칙이 이미 검증 된 경우 (서버로부터의 응답을 기다리는 중) 폼은 어쨌든 전송됩니다.

모든 것이 잘 작동하기 전이나 후에, 양식에 대한 다른 규칙과 마찬가지로. 그러나 원격 규칙에 대한 GET의 중간에 있다면 $ ('# myform'). validate.form()이 true를 반환하고 양식이 제출됩니다.

그래서 코드는 다음과 같습니다

$('#myform').ajaxForm({ 
    beforeSubmit: processRequest, 
    success: processResponse, 
    dataType: 'json' 
}); 

$('#myform').validate({ 
    rules: { 
     onkeyup: false, 
     title: { 
      required: true, 
      remote: { url: 'check_title.php' } 
     } 
    } 
}); 

function processRequest(formData, jqForm, options) { 
    if (!$('#myform').validate.form()) { 
     // cancel the form submition 
     return false; 
    } 
    // do some stuff 
    return true; 
} 

원격 검증을 보류 기다리고 강제 할 수있는 방법이 있나요?

또는 유효성 검사 규칙에서 'onsubmit : true'만 남겨 둘 수 있으므로 유효성 검사가 제출시에만 발생하고 validate(), form()에 대한 값을 반환하기 전에 완료 될 때까지 기다릴 수 있습니다. 그러나 저의 마지막 수단입니다.

답변

1

난 당신이 바로이

ajaxForm documentation에 따르면이 표준 $의 아약스 매개 변수에 전달할 수있는 경쟁 조건 같은 소리 때문에, 원격 검증 대기하게 할 생각에 그것을 가지고 생각

따라서 시도해 볼 수있는 것은 async: false을 ajaxForm에 전달하는 것입니다. 그러면 원격 호출이 차단됩니다 (동기식).

+0

양식을 제출하기 전에 processRequest가 호출되기 때문에 ajaxForm 옵션을 사용하면이 옵션을 사용할 수 없습니다. 하지만 그것은 $ .ajax 매개 변수를 사용할 수있는 원격 규칙에서 'async : false'를 시도하는 아이디어를주었습니다. 작동하지만 최적화가 완료 될 때까지 양식의 모든 UI 상호 작용이 차단되어 최적 상태가 아니므로 최적 상태는 아닙니다. 나는 유효성 검사 옵션으로 'onsubmit : true'만을 사용하는 것이 좋습니다. – mtourne