패턴 및 JQuery와 아약스 대기 문제 :자바 스크립트 모듈 나는 기본적으로 메시지를 전송하고 계속하기 위해 응답을 기다려야하는 사용자 정의 JS 모듈 쓴
var manageBooking = (function (jQ) {
//decalre private variables
var domain, msgRecieved, msgResponse, validationValue;
//decalre private functions
var sendMessage, wait;
// A private variables
domain = document.domain;
msgRecieved = false;
msgResponse = null;
wait = function(timeOutStep){
var w;
console.log('msgRecieved', msgRecieved);
if (msgRecieved === true) {
clearTimeout(w);
return;
} else {
console.log('waiting..');
w = setTimeout(wait, timeOutStep, timeOutStep);
}
}
// A private function to send messages
sendMessage = function(requestURL, data, type) {
console.log(requestURL);
console.log(data);
console.log(type);
//reset vars to defaults
msgRecieved = false;
msgResponse = null;
jQuery.ajax({
url: "http://"+domain+"/_ajax/"+requestURL,
dataType: "html",
async: true,
data: data,
type: type,
success: function(msg){
console.log(msg);
msgResponse = msg;
msgRecieved = true;
}
});
console.log('after ajax call');
wait(500);
console.log('after wait');
console.log('msgRecieved', msgRecieved);
return;
};
return {
// A public variable
errorMsg: "",
validationName: "",
bookingID: "",
output: "",
// A public function to login
login: function(enteredBookingID, enteredSurname) {
// Call private sendMsg
sendMessage("user_login/"+enteredBookingID+"/"+enteredSurname, null, 'GET');
console.log(msgResponse);
throw "error";
//check response
var patt=/Sorry/i;
//test pattern
var result=patt.test($.trim(msgResponse));
//if false OK
if (result === false) {
var split = msgResponse.split('|');
validationName = split[0];
validationValue = split[1];
bookingID = enteredBookingID
return true;
}
//else error
errorMsg = msgResponse;
return false;
}
};
})(jQuery);
manageBooking.login(123,123);
내가 sendMessage
강요 데 문제를 함수는 ajax가 완료 될 때까지 대기하고 msgRecieved
을 true로 설정합니다.
그러나 sendMessage
함수는 wait
함수를 한 번 누른 다음 계속됩니다. 다음과 같은 콘솔 출력 이벤트의 순서를 보여줍니다
GET http://website/_ajax/user_login/123/123
after ajax call //sendMessage()
msgRecieved, false //wait()
waiting.. //wait()
after wait //sendMessage()
msgRecieved, false //sendMessage()
null//login()
uncaught exception: error //login()
<p>Sorry, we cannot locate your details. </p> <!-- jQuery Ajax call -->
msgRecieved, true //wait()
내가 가진 혼란 스러워요하면 wait
기능이 바로 마지막에 다시 불 것이다 ..
사람이 나에게 점점에 대한 몇 가지 포인터를 제공 할 수 있습니다 이게 효과가 있니?
사용 콜백는 자바 스크립트를 프로그래밍하기위한 것입니다 :) –