私はすべてのform
ベースのビューをjQueryを使用してモーダルダイアログにロードするようにした.NET MVC 3プロジェクトに取り組んでいます。モーダルフォーム - AjaxStartとEnd - .loadおよび.ajax()コール
私のすべてのビューは、プロジェクト全体でajaxを使用してロードされます。
私は(など、追加、編集などのフォームベースのビューの)指定されたURLをフェッチする任意のリンクをクリックしてイベントのために呼び出すjQueryの機能を持っており、次のようにモーダルダイアログに表示します。
function getFormInModal(url_location, modalWidth, modaltitle, tab) {
var url = url_location;
var dialogDiv = $('<div style="display: none;"></div>').appendTo('body');
dialogDiv.load(url, function() {
//Enable the client side validation
var $form = $('form', dialogDiv);
$.validator.unobtrusive.parse($form);
var buttons = {
"Submit": function() {
//Create a validation summary container
var valSummary = ModalForms.validationSummary();
valSummary.setup($form);
if ($form.valid()) {
var postUrl = $form.attr('action');
var formData = $form.serialize();
jQuery.ajax({
url: postUrl,
type: 'POST',
data: formData,
complete: function (data) {
dialogDiv.dialog('close');
refresh(tab);
$.jGrowl("Submitted Successfully.", { life: 2000 });
},
error: function (jqXHR, textStatus, errorThrown) {
var data = jQuery.parseJSON(jqXHR.responseText);
if (data && data.errors) {
valSummary.addErrors(data.errors);
}
}
});
}
},
Cancel: function() {
dialogDiv.dialog('close');
$("html,body").css("overflow", "auto");
}
};
//Load up the dialog
dialogDiv.dialog({
autoOpen: true,
modal: true,
title: modaltitle,
draggable: false,
resizable: false,
buttons: buttons,
width: modalWidth,
close: function() {
$(this).remove();
},
open: function (event, ui) {
$("html,body").css("overflow", "hidden");
}
});
});
}
私の問題は、submit
モーダルのボタンsuccess
の機能にあります。
それは3つの事を行います。 1.モーダルフォームダイアログ 2. POST
が 3.成功したことをユーザーに通知閉じますが、別の簡単な関数refresh()
への呼び出しを経由して特定のDIV
でコンテンツを更新します。 - - 私はリンク をクリックしてください - 私は見
$("#loading").dialog({
autoOpen: false,
modal: true,
width: '450px',
title: 'Patience is a virtue!',
resizable: false,
draggable: false
});
$("#loading").ajaxStart(function() {
$("#loading").dialog('open');
$("html,body").css("overflow", "hidden");
});
$("#loading").ajaxSuccess(function() {
$("#loading").dialog('close');
$("html,body").css("overflow", "auto");
});
$("#loading").ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
$("#loading").dialog('close');
$.jGrowl(html(thrownError.toString()), { life: 2000 });
});
すべてが完璧に動作します:今、別に私は次のように私のAJAX呼び出しのステータスを扱うDOM準備にいくつかのイベントをフックアップしている
function refresh(tabname) {
if (tabname == "dashboard") {
$("#dashboard-tab").load("/Sales/Home/Reports");
$("#tabs").tabs("select", 0);
}
if (tabname == "leads") {
$("#leads-tab").load("/Sales/Lead/Index");
$("#tabs").tabs("select", 1);
}
if (tabname == "retail") {
$("#retail-tab").load("/Sales/Retail/Index");
$("#tabs").tabs("select", 2);
}
if (tabname == "corporate") {
$("#corporate-tab").load("/Sales/Corporate/Index");
$("#tabs").tabs("select", 3);
}
}
#loading
モーダルダイアログ - IT負荷と#loading
閉じ、dialogDiv
モーダルは を開きます - 私は提出クリックして#loading
がdialogDiv
の上に開きます - それが完了し、jGrowl通知を受け取ったとき
最後に、POSTが完了してが呼び出されてコンテンツが更新されると、#loading
モーダルが実行されます再び表示されません。
基本的に.ajaxStart()
は発砲していません。何故かはわからない。
最初に、送信ボタンのクリックイベントで行われたajax投稿にsuccess
関数を書きました。その後、私はcomplete
が良いかもしれないことに気づいた。
他のライブの.ajax()
コールが完了したあと、refresh()を呼び出してを呼び出しても、.ajaxStart()
は機能しません。
誰かが助けてください!
お使いのリフレッシュ方法が有効ですか? ajaxStartが呼び出されていないことだけです。実際にカイル – Kyle