동기식 양식 유효성 검사의 단점
오류 메시지에 응답할 때 전체 페이지를 다시 로드해야 합니다. (캐싱이 있더라도 클라이언트는 파일을 최신 상태로 유지하기 위해 각 파일이 http 프로토콜을 통해 업데이트되었는지 여부를 계속 비교해야 합니다.)
서버가 오류로 응답하면 사용자가 이전에 입력한 모든 정보가 손실되므로 사용자는 처음부터 정보를 입력해야 합니다(일부 브라우저에서는 이 데이터를 캐시합니다).
비동기 인증폼의 원래 의도
사용자 경험 개선
네트워크 요청을 최소화하고 서버 부담을 줄입니다
일반적인 비동기식 폼 확인을 살펴보겠습니다(백그라운드에 사원번호가 존재하는지 확인하고, 존재한다면 유효한 사원번호인지 확인)
사원번호 확인
var BASE_PATH = '${rc.contextPath}';
var $workerIdInput = $('#workerIdInput');
var $workerIdError = $('#workerIdError');
//사용자가 입력한 작업번호가 맞는지 확인
var isWorkerIdCordirect = false;
var ERROR_WORKER_ID_IS_NULL = "직원 ID는 비워둘 수 없습니다.";
var ERROR_WORKER_ID_IS_NOT_CORRECT = "유효한 직원 ID를 입력하세요.";
//오류 메시지 표시
함수 showWorkerIdError(errorMessage) {
$workerIdError.html(errorMessage);
$workerIdError.show();
}
//오류 메시지 숨기기
$workerIdInput.on('keydown', function() {
$workerIdError.hide();
});
//마지막으로 입력한 작업번호 저장
$workerIdInput.on('focus', function() {
var WorkerId = $.trim($(this).val());
$(this).data('이전', 작업자 ID);
});
//흐릿하게 할 때 확인
$workerIdInput.on('blur', function() {
var WorkerId = $.trim($(this).val());
//길이가 0인 경우 작업번호가 비어 있다는 오류 메시지가 표시됩니다
if (!workerId.length) {
ShowWorkerIdError(ERROR_WORKER_ID_IS_NULL);
거짓을 반환합니다.
}
//현재 사용자가 입력한 데이터가 지난번에 입력한 데이터와 동일할 경우 백그라운드 인터페이스는 호출되지 않습니다.
//사용자가 123456을 입력하고 백그라운드 인터페이스를 호출한 후 잘못된 작업 번호로 결과를 반환한다고 가정합니다
//사용자가 입력 내용을 변경한 후에도 여전히 123456이면 검증 프로그램이 네트워크에 접속하지 않고 바로 오류 메시지를 표시합니다
if (workerId == $(this).data('이전')) {
If (!isWorkerIdCorrent) {
showWorkerIdError(ERROR_WORKER_ID_IS_NOT_CORRECT);
}
거짓을 반환합니다.
}
//백엔드 인터페이스를 호출하여 직원 ID가 올바른지 확인
checkWorkerIdExists(workerId, function(data) {
isWorkerIdCordirect = data.isWorkerIdExists;
If (!isWorkerIdCorrent) {
showWorkerIdError(ERROR_WORKER_ID_IS_NOT_CORRECT);
}
});
});
함수 checkWorkerIdExists(workerId, 콜백) {
$.ajax({
URL: BASE_PATH '/forgotPwd/checkWorkerIdExists.htm',
데이터: {
작업자 ID: 작업자 ID
},
성공: 콜백
});
}
$workerIdForm.on('제출', function() {
//서버가 true를 반환하는 경우에만 양식을 제출할 수 있습니다
if (!isWorkerIdCorrent) {
$workerIdInput.focus();
거짓을 반환합니다.
}
});
위 코드를 작성하면 기본적으로 입력창 검증이 완료됩니다.
아직 사용자 경험에 영향을 미치는 부분이 있는 것 같아요
캐리지 리턴 작업은 아직 지원되지 않습니다. 맙소사, 캐리지 리턴도 양식을 제출할 수 있어야 합니다
사용자의 인터넷 속도가 느린 경우 isWorkerIdCorlect가 false이므로 제출 버튼을 눌렀을 때 응답이 없으며, 서버 확인이 성공한 경우에만 true입니다
수정된 코드는 다음과 같습니다.
var BASE_PATH = '${rc.contextPath}';
var $workerIdInput = $('#workerIdInput');
var $workerIdError = $('#workerIdError');
//사용자가 입력한 작업번호가 맞는지 확인
var isWorkerIdCordirect = false;
//사원ID 백그라운드 인증 완료 여부 확인 (true: 인증 진행 중, false: 인증이 시작되지 않았거나 종료된 상태)
var isWorkerIdLoading = false;
//사용자가 양식을 제출했는지 확인
var isSubmit = false;
var ERROR_WORKER_ID_IS_NULL = "직원 ID는 비워둘 수 없습니다.";
var ERROR_WORKER_ID_IS_NOT_CORRECT = "유효한 직원 ID를 입력하세요.";
//오류 메시지 표시
함수 showWorkerIdError(errorMessage) {
$workerIdError.html(errorMessage);
$workerIdError.show();
}
//오류 메시지 숨기기
$workerIdInput.on('keydown', function() {
$workerIdError.hide();
});
//마지막으로 입력한 작업번호 저장
$workerIdInput.on('focus', function() {
var WorkerId = $.trim($(this).val());
$(this).data('이전', 작업자 ID);
});
//흐릿하게 할 때 확인
$workerIdInput.on('blur', function() {
var WorkerId = $.trim($(this).val());
//길이가 0인 경우 작업번호가 비어 있다는 오류 메시지가 표시됩니다
if (!workerId.length) {
ShowWorkerIdError(ERROR_WORKER_ID_IS_NULL);
거짓을 반환합니다.
}
//현재 사용자가 입력한 데이터가 지난번에 입력한 데이터와 동일할 경우 백그라운드 인터페이스는 호출되지 않습니다.
//사용자가 123456을 입력하고 백그라운드 인터페이스를 호출한 후 잘못된 작업 번호로 결과를 반환한다고 가정합니다
//사용자가 입력 내용을 변경한 후에도 여전히 123456이면 검증 프로그램이 네트워크에 접속하지 않고 바로 오류 메시지를 표시합니다
if (workerId == $(this).data('이전')) {
If (!isWorkerIdCorrent) {
showWorkerIdError(ERROR_WORKER_ID_IS_NOT_CORRECT);
}
거짓을 반환합니다.
}
//백엔드 인터페이스를 호출하여 직원 ID가 존재하는지 확인
checkWorkerIdExists(workerId, function(data) {
isWorkerIdCordirect = data.isWorkerIdExists;
If (!isWorkerIdCorrent) {
showWorkerIdError(ERROR_WORKER_ID_IS_NOT_CORRECT);
}
});
});
함수 checkWorkerIdExists(workerId, 콜백) {
$.ajax({
URL: BASE_PATH '/forgotPwd/checkWorkerIdExists.htm',
데이터: {
작업자 ID: 작업자 ID
},
beforeSend: 함수() {
//요청을 보내기 전에 ID를 확인합니다
isWorkerIdLoading = true;
},
성공: 콜백,
완료: function() {
//완료 후 로고를 닫습니다
isWorkerIdLoading = false;
//백그라운드 데이터 확인 과정에서 사용자가 양식을 제출하면 여기에 자동으로 제출됩니다.
If (isSubmit) {
$workerIdForm.submit();
}
}
});
}
//양식을 제출하려면 Enter를 누르세요
$workerIdInput.on('keypress', function(e) {
if (e.which === 13) {
$(this).blur();
$workerIdForm.submit();
}
});
$workerIdForm.on('제출', function() {
//사원번호가 백그라운드에서 확인되면 사용자가 양식을 제출했음을 나타냅니다.
if (isWorkerIdLoading) {
isSubmit = true;
거짓을 반환합니다.
}
if (!isWorkerIdCorrent) {
$workerIdInput.focus();
거짓을 반환합니다.
}
});
최종 효과, 사진의 두 입력 상자는 모두 비동기식으로 확인되지만 효과는 동기식과 동일하게 보입니다.
그림은 GPRS 네트워크를 사용하여 느린 네트워크 속도 상황을 시뮬레이션합니다
렌더링

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
