AJAX-вызовы являются асинхронными.Это означает, что любой код, следующий за запросом, не ждет, пока запрос не вернется, прежде чем он будет выполнен.
Другими словами, запрос AJAX не блокирует выполнение последующих строк кода.Таким образом, к моменту получения ответа от AJAX-запроса уже были выполнены следующие строки кода:
Любой код, основанный на ответе AJAX-запроса, должен быть размещен внутри callback.
$("#chkCorporateGift").click(function(){
// var type = $(this).is(":checked") ? "Corporate" : "Personal";
// It is more efficient to use this.checked instead of using .is(":checked")
var type = this.checked ? "Corporate" : "Personal";
if(!info_lbl.hasOwnProperty(type)){
$.ajax({
url: svc_og + "Get" + type + "InformationLabel",
success: function(data){
info_lbl[type] = data;
// code that relies on the response needs to be placed in
// a callback (or in a function that is called here).
$("#lblInformationType").text(info_lbl[type]);
}
});
} else {
$("#lblInformationType").text(info_lbl[type]);
}
});
Я бы предположил, что причина, по которой все работает правильно, когда у вас есть точка останова, заключается в том, что пауза в выполнении дает время отклика AJAX для возврата.
РЕДАКТИРОВАТЬ: Улучшена эффективность кода с использованием this.checked
вместо оригинального $(this).is(':checked')
.