В моем проекте я использую JQuery и JQuery шаги и blockui в качестве плагиновJquery blockui не работает с JQuery шаги
Теперь у меня есть форма три шага; когда я перейти с шага 1 к шагу 2, мне нужно сделать вызов AJAX, проверить некоторые поля, и если все это нормально, я могу перейти ко второму шагу
Мой псевдокод:
form.steps({
headerTag: "h3",
bodyTag: "div",
cssClass : "wizard",
titleTemplate: '<span class="number">#index#</span> #title#',
transitionEffect: "slideLeft",
onStepChanging: function (event, currentIndex, newIndex)
{
if (currentIndex > newIndex)
{
return true;
}
if(currentIndex === 0 && newIndex ===1)
{
var result = doAjax();
console.log("result "+result);
return result;
}
},
autoFocus : true,
enableAllSteps : false,
enableKeyNavigation : false,
enablePagination : true,
enableContentCache : false,
enableCancelButton : true,
enableFinishButton : true,
labels : {
cancel : 'Delete',
finish : 'Save',
next : 'next',
previous : 'previous',
current : ""
}
});
Псевдокод О.Д. функция doAjax();
заключается в следующем:
function doAjax()
{
var dataObj = new Object();
dataObj.num = $("#num").val().toUpperCase();
dataObj.cat = $("#cat").val().toUpperCase();
dataObj.canc = false;
var start = 0;
var end = 0;
$.ajax({
url: '${ajaxUrl}',
async : false, //I need a synchronous call otherwhise jquery steps will process the result before the end of the call
dataType : 'json',
contentType: 'application/json; charset=UTF-8',
data : JSON.stringify(dataObj),
type : 'POST',
beforeSend : function(){
start = (new Date()).getTime();
console.log("Start: "+start);
$.blockUI({
message: '<h2><img src="${pageContext.request.contextPath}/images/busy.gif" />Processing....</h2>',
onBlock: function() {
alert('Page is now blocked; fadeIn complete');
}
});
},
complete : function(){
end = (new Date()).getTime();
var total = end-start;
console.log("Stoppo dopo ("+total+") millisecondi");
$.unblockUI();
},
success: function (data) {
var codiceEsito = data.esitoOperazione;
if(codiceEsito == 200)
{
esitoSalvataggioPatente = true;
}
else if(codiceEsito == 412)
{
esitoSalvataggioPatente = false;
}
else if(codiceEsito == 500)
{
esitoSalvataggioPatente = false;
}
},
error: function(data){
esitoSalvataggioPatente = false;
}
});
console.log("Final result "+esitoSalvataggioPatente);
return esitoSalvataggioPatente;
}
Все работает очень хорошо, за исключением blockui; он никогда не показывал, и это, кажется, не будет никогда называется В моем браузере консоли я вижу следующее:
Start 1480419159812
jquery-1.10.2.min.js:6 Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.send
Stoppo dopo (1969) millisecondi
Final result false
result false
В этом случае blockUI никогда не называется. Если я вызову тот же метод (doAjax) вне метода onStepChanging шагов jquery, то blockUI успешно вызван
Может ли кто-нибудь предложить мне, как это сделать? В основном я хочу представить пользователю blockUI во время AJAX вызова до изменения
шаг спасибо Angelo