두 개의 입력 텍스트 필드와 하나의 "저장"버튼이 있습니다.Ajax 호출이 완료되도록 올바른 간격으로 설정하고 있습니까?
<input type="text" id="myInput" />
<input type="text" id="searchResult"/>
<button id="myButton>save</button>
myInput
텍스트 필드는 일부 데이터를 얻을 searchResult
텍스트 필드에 결과를 표시하는 Ajax 요청을 전송 onchange를 이벤트 있습니다.
저장 버튼에는 빈 문자열 등의 입력란을 확인하는 클릭 이벤트이 있습니다 (). ok이면 저장을 계속합니다.
가 트리거onchange event
다음 사용자가 텍스트 필드에 텍스트의 유형과는
save"
버튼 "을 클릭, 문제는,callAjaxToGetData()
가 호출$("myInput").change(function() { var userInput = $("myInput").val(); //get value from the text field var responseText = callAjaxToGetData(userInput): //XHR request to get some data $("searchResult").val(responseText); //show the XHR result here }); $("myButton").click(function() { var searchResultField = $("searchResult").val(); //get value from the searchResult field var isOK = validate(searchResultField); //check empty string and such if(isOK) { saveDataViaAjax(userInput); } });
. (XHR)
보다 앞에
callAjaxToGetData()
이있다. 검색 결과 텍스트 필드를 작성하고 입력하면 myButtononclick event
이 트리거됩니다.onclick 이벤트 처리기 측에서는 searchResult 필드가 여전히 비어있어 유효성 검사가 실패합니다.
callAjaxToGetData()
마지막으로 searchResult 텍스트 필드를 완료하고 채 웁니다. 검증이 실패되지 않도록 이상적 callAjaxToGetData()가 먼저 완료된
는 온 클릭 이벤트의 내부 프로세스를 진행.
사람들이이 문제에 어떻게 대처하는지 궁금하네요.
내가
$("myButton").click(function() {
var interval = setInterval(function() { //call every 500ms
//if responseText is not null that means i know the ajax inside of onchange event is completed for sure.
if(responseText != null) {
clearInterval(interval);
var searchResultField = $("searchResult").val(); //get value from the searchResult field
var isOK = validate(searchResultField); //check empty string and such
if(isOK) { saveDataViaAjax(userInput); }
}
}, 500);
});
저장을 클릭하면 요청이 진행되고 있는지 확인하고 완료 될 때까지 기다린 다음 validate-save 함수를 호출합니다. 입력을 너무 빠르게 변경하고 요청이 경쟁 조건에 들어가면 첫 번째 문제를 중지하거나 무시해야하는 또 다른 문제가 발생할 수 있습니다. – jasssonpet
$ .active는 여기에 옵션이 될 수 있습니다 .. –