Jquery:Ajax:如何在开始之前显示加载对话框并在关闭之后关闭?
我想在AJAX请求正在进行时显示加载对话框; 我想在我的项目中的任何地方使用那段代码。
//--Add $("div.add_post a").click(function(){ var dlg = loadingDialog({modal : true, minHeight : 80, show : true}); $.ajax( { url : "/add.php", beforeSend : function (){ dlg.dialog("show"); }, complete : function (){ dlg.dialog("hide"); } } ); return false; }) //-- //--Loading dialog function loadingDialog(dOpts, text = "пожалуйста подождите, идет загрузка...") { var dlg = $(" "+text+"").dialog(dOpts); $(".ui-dialog-titlebar").hide(); return dialog; } //--
新代码
//--Add $("div.add_post a").click(function(){ var dlg = loadingDialog(); $.ajax( { url : "/add.php", complete : function (){ dlg.dialog("hide"); }, success : function (data) { $(data).find("#add_post").dialog(); } } ); return false; }) //-- //--Loading dialog function loadingDialog(dOpts = {modal : true, minHeight : 80, show : true}, text = "пожалуйста подождите, идет загрузка...") { var dlg = $(" "+text+"").dialog(dOpts); $(".ui-dialog-titlebar").hide(); return dlg; } //--
返回 – 错误:没有这样的方法’隐藏’对话框小部件实例
最新新代码
//--Add $("div.add_post a").click(function(){ var dlg; loadingDialog(); $.ajax( { url : "/add.php", complete : function (){ dlg.dialog("hide"); }, success : function (data) { var form = $(data).find("#add_post"); form.dialog({title : "Добавить признание", modal : true}); } } ); return false; }) //-- //--Loading dialog function loadingDialog(dOpts = {modal : true, minHeight : 80, show : true}, text = "пожалуйста подождите, идет загрузка...") { dlg = $(" "+text+"").dialog(dOpts); $(".ui-dialog-titlebar").hide(); }
回 :
TypeError:dlg未定义
dlg.dialog( “隐藏”);
由于$.ajax()
是异步的,你不需要为’before send’使用特殊的函数…使用你的例子,只需在调用$.ajax()
这样做:
dlg.dialog("show"); $.ajax( { url: "/add.php", complete: function() { dlg.dialog("option", "hide"); } } );
(什么是异步IO? http://en.wikipedia.org/wiki/Asynchronous_I/O )
注意!
在您的示例中,您在dlg
创建并存储对话框,但随后返回dialog
,这是一个问题。 使用你的代码,它应该是这样的:
function loadingDialog(dOpts, text = "пожалуйста подождите, идет загрузка...") { var dlg = $(" "+text+"").dialog(dOpts); $(".ui-dialog-titlebar").hide(); return dlg; }
在你的’新代码’之后我添加了这个建议:
在全局命名空间中创建函数外部的对话框,如下所示:
var dlg //de Put this OUTSIDE $("div.add_post a").click({}) function loadingDialog(dOpts, text = "пожалуйста подождите, идет загрузка...") { dlg = $(" "+text+"").dialog(dOpts); $(".ui-dialog-titlebar").hide(); } loadingDialog({modal : true, minHeight : 80, show : true});
然后什么都不返回,只需使用函数设置加载对话框,该函数修改函数命名空间之外的全局变量。
注意: http : .dialog('option','hide')
不是.dialog('hide')
我会尝试
$("div.add_post a").click(function(){ var dlg = loadingDialog({modal : true, minHeight : 80, show : true}); dlg.dialog("show"); $.ajax({ url : "/add.php", complete : function (){ dlg.dialog("hide"); } }); return false; }); //--Loading dialog function loadingDialog(dOpts, text = "пожалуйста подождите, идет загрузка...") { var dlg = $(" "+text+"").dialog(dOpts); $(".ui-dialog-titlebar").hide(); return dialog; }
工作)))
$(".wrapper").prepend('
'); //--Add $("div.add_post a").click(function(){ $.ajax( { url : "/add.php", beforeSend : function () { loading(); }, complete : function (){ }, success : function (data) { loading("stop"); var form = $(data).find("#add_post"); form.dialog({title : "Добавить признание", modal : true}); } } ); return false; }) //-- //--Loading dialog function loading(type = "start") { if(type == "start") { $("#loading").dialog({modal : true, minHeight: 30}); $(".ui-dialog-titlebar").hide(); } else $(".ui-dialog-content").dialog().dialog("close"); }
// –
- 当我们进行ajax调用并等待响应并阻止页面时显示一个微调器
- 我如何在jQuery 1.3中使用Ajax Queue插件?
- 使用xhrFields时的状态代码= 0:{withCredentials:true}在使用Firefox的jQuery $ ajax调用中
- Bottle Py:为jQuery AJAX请求启用CORS
- 用于Web服务调用的ASP.NET Ajax与JQuery
- 从ASP.NET MVC下载JQuery-AJAX请求中的excel文件
- 数据不从表单传输到mysql表(不会发生数据更新)
- 如何在Rails3中选中或取消选中复选框时触发ajax调用?
- 弹出窗口阻塞,jquery window.open成功:AJAX? 外面好的