123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- /**
- * @author ZhangHuihua@msn.com
- *
- */
- /**
- * 普通ajax表单提交
- * @param {Object} form
- * @param {Object} callback
- * @param {String} confirmMsg 提示确认信息
- */
- function validateCallback(form, callback, confirmMsg) {
- var $form = $(form);
- if (!$form.valid()) {
- return false;
- }
-
- var _submitFn = function(){
- $.ajax({
- type: form.method || 'POST',
- url:$form.attr("action"),
- data:$form.serializeArray(),
- dataType:"json",
- cache: false,
- success: callback || DWZ.ajaxDone,
- error: DWZ.ajaxError
- });
- }
-
- if (confirmMsg) {
- alertMsg.confirm(confirmMsg, {okCall: _submitFn});
- } else {
- _submitFn();
- }
-
- return false;
- }
- /**
- * 带文件上传的ajax表单提交
- * @param {Object} form
- * @param {Object} callback
- */
- function iframeCallback(form, callback){
- var $form = $(form), $iframe = $("#callbackframe");
- if(!$form.valid()) {return false;}
- if ($iframe.size() == 0) {
- $iframe = $("<iframe id='callbackframe' name='callbackframe' src='about:blank' style='display:none'></iframe>").appendTo("body");
- }
- if(!form.ajax) {
- $form.append('<input type="hidden" name="ajax" value="1" />');
- }
- form.target = "callbackframe";
-
- _iframeResponse($iframe[0], callback || DWZ.ajaxDone);
- }
- function _iframeResponse(iframe, callback){
- var $iframe = $(iframe), $document = $(document);
-
- $document.trigger("ajaxStart");
-
- $iframe.bind("load", function(event){
- $iframe.unbind("load");
- $document.trigger("ajaxStop");
-
- if (iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" || // For Safari
- iframe.src == "javascript:'<html></html>';") { // For FF, IE
- return;
- }
- var doc = iframe.contentDocument || iframe.document;
- // fixing Opera 9.26,10.00
- if (doc.readyState && doc.readyState != 'complete') return;
- // fixing Opera 9.64
- if (doc.body && doc.body.innerHTML == "false") return;
-
- var response;
-
- if (doc.XMLDocument) {
- // response is a xml document Internet Explorer property
- response = doc.XMLDocument;
- } else if (doc.body){
- try{
- response = $iframe.contents().find("body").text();
- response = jQuery.parseJSON(response);
- } catch (e){ // response is html document or plain text
- response = doc.body.innerHTML;
- }
- } else {
- // response is a xml document
- response = doc;
- }
-
- callback(response);
- });
- }
- /**
- * navTabAjaxDone是DWZ框架中预定义的表单提交回调函数.
- * 服务器转回navTabId可以把那个navTab标记为reloadFlag=1, 下次切换到那个navTab时会重新载入内容.
- * callbackType如果是closeCurrent就会关闭当前tab
- * 只有callbackType="forward"时需要forwardUrl值
- * navTabAjaxDone这个回调函数基本可以通用了,如果还有特殊需要也可以自定义回调函数.
- * 如果表单提交只提示操作是否成功, 就可以不指定回调函数. 框架会默认调用DWZ.ajaxDone()
- * <form action="/user.do?method=save" onsubmit="return validateCallback(this, navTabAjaxDone)">
- *
- * form提交后返回json数据结构statusCode=DWZ.statusCode.ok表示操作成功, 做页面跳转等操作. statusCode=DWZ.statusCode.error表示操作失败, 提示错误原因.
- * statusCode=DWZ.statusCode.timeout表示session超时,下次点击时跳转到DWZ.loginUrl
- * {"statusCode":"200", "message":"操作成功", "navTabId":"navNewsLi", "forwardUrl":"", "callbackType":"closeCurrent", "rel"."xxxId"}
- * {"statusCode":"300", "message":"操作失败"}
- * {"statusCode":"301", "message":"会话超时"}
- *
- */
- function navTabAjaxDone(json){
- DWZ.ajaxDone(json);
- if (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){
- if (json.navTabId){ //把指定navTab页面标记为需要“重新载入”。注意navTabId不能是当前navTab页面的
- navTab.reloadFlag(json.navTabId);
- } else { //重新载入当前navTab页面
- var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
- var args = $pagerForm.size()>0 ? $pagerForm.serializeArray() : {}
- navTabPageBreak(args, json.rel);
- }
-
- if ("closeCurrent" == json.callbackType) {
- setTimeout(function(){navTab.closeCurrentTab(json.navTabId);}, 100);
- } else if ("forward" == json.callbackType) {
- navTab.reload(json.forwardUrl);
- } else if ("forwardConfirm" == json.callbackType) {
- alertMsg.confirm(json.confirmMsg || DWZ.msg("forwardConfirmMsg"), {
- okCall: function(){
- navTab.reload(json.forwardUrl);
- },
- cancelCall: function(){
- navTab.closeCurrentTab(json.navTabId);
- }
- });
- } else {
- navTab.getCurrentPanel().find(":input[initValue]").each(function(){
- var initVal = $(this).attr("initValue");
- $(this).val(initVal);
- });
- }
- }
- }
- /**
- * dialog上的表单提交回调函数
- * 当前navTab页面有pagerForm就重新加载
- * 服务器转回navTabId,可以重新载入指定的navTab. statusCode=DWZ.statusCode.ok表示操作成功, 自动关闭当前dialog
- *
- * form提交后返回json数据结构,json格式和navTabAjaxDone一致
- */
- function dialogAjaxDone(json){
- DWZ.ajaxDone(json);
- if (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){
- if (json.navTabId){
- navTab.reload(json.forwardUrl, {navTabId: json.navTabId});
- } else {
- var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
- var args = $pagerForm.size()>0 ? $pagerForm.serializeArray() : {}
- navTabPageBreak(args, json.rel);
- }
- if ("closeCurrent" == json.callbackType) {
- $.pdialog.closeCurrent();
- }
- }
- }
- /*在对话框中操作数据,并刷新对话框*/
- function dialogAjaxDoneCloseAndReflush(json) {
- DWZ.ajaxDone(json);
- if (json.statusCode == DWZ.statusCode.ok){
- if (json.navTabId){
- navTab.reload(json.forwardUrl, {navTabId: json.navTabId});
- } else if (json.rel) {
- var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
- var args = $pagerForm.size()>0 ? $pagerForm.serializeArray() : {}
- navTabPageBreak(args, json.rel);
- }
- if ("closeCurrent" == json.callbackType) {
- $.pdialog.closeCurrent();
- }
- }
- $.pdialog.closeCurrent();
- navTab.reload();
- }
- /*在对话框中操作数据,并刷新对话框*/
- function dialogAjaxDoneReflush(json) {
- DWZ.ajaxDone(json);
- if (json.statusCode == DWZ.statusCode.ok){
- if (json.navTabId){
- navTab.reload(json.forwardUrl, {navTabId: json.navTabId});
- } else if (json.rel) {
- var $pagerForm = $("#pagerForm", navTab.getCurrentPanel());
- var args = $pagerForm.size()>0 ? $pagerForm.serializeArray() : {}
- navTabPageBreak(args, json.rel);
- }
- if ("closeCurrent" == json.callbackType) {
- $.pdialog.closeCurrent();
- }
- }
- //$.pdialog.closeCurrent();
- navTab.reload();
- }
- /*在对话框中操作数据,并刷新对话框*/
- function dialogAjaxDoneFather(json) {
- DWZ.ajaxDone(json);
- if (json.statusCode == DWZ.statusCode.ok) {
- if (json.navTabId) {
- var dialog = $("body").data(json.navTabId);
- $.pdialog.reload(dialog.data("url"), { data: {}, dialogId: json.navTabId, callback: null })
- }
- if ("closeCurrent" == json.callbackType) {
- $.pdialog.closeCurrent();
- }
- }
- }
- /**
- * 处理navTab上的查询, 会重新载入当前navTab
- * @param {Object} form
- */
- function navTabSearch(form, navTabId){
- var $form = $(form);
- if (form[DWZ.pageInfo.pageNum]) form[DWZ.pageInfo.pageNum].value = 1;
- navTab.reload($form.attr('action'), {data: $form.serializeArray(), navTabId:navTabId});
- return false;
- }
- /**
- * 处理dialog弹出层上的查询, 会重新载入当前dialog
- * @param {Object} form
- */
- function dialogSearch(form){
- var $form = $(form);
- if (form[DWZ.pageInfo.pageNum]) form[DWZ.pageInfo.pageNum].value = 1;
- $.pdialog.reload($form.attr('action'), {data: $form.serializeArray()});
- return false;
- }
- function dwzSearch(form, targetType){
- if (targetType == "dialog") dialogSearch(form);
- else navTabSearch(form);
- return false;
- }
- /**
- * 处理div上的局部查询, 会重新载入指定div
- * @param {Object} form
- */
- function divSearch(form, rel){
- var $form = $(form);
- if (form[DWZ.pageInfo.pageNum]) form[DWZ.pageInfo.pageNum].value = 1;
- if (rel) {
- var $box = $("#" + rel);
- $box.ajaxUrl({
- type:"POST", url:$form.attr("action"), data: $form.serializeArray(), callback:function(){
- $box.find("[layoutH]").layoutH();
- }
- });
- }
- return false;
- }
- /**
- *
- * @param {Object} args {pageNum:"",numPerPage:"",orderField:"",orderDirection:""}
- * @param String formId 分页表单选择器,非必填项默认值是 "pagerForm"
- */
- function _getPagerForm($parent, args) {
- var form = $("#pagerForm", $parent).get(0);
- if (form) {
- if (args["pageNum"]) form[DWZ.pageInfo.pageNum].value = args["pageNum"];
- if (args["numPerPage"]) form[DWZ.pageInfo.numPerPage].value = args["numPerPage"];
- if (args["orderField"]) form[DWZ.pageInfo.orderField].value = args["orderField"];
- if (args["orderDirection"] && form[DWZ.pageInfo.orderDirection]) form[DWZ.pageInfo.orderDirection].value = args["orderDirection"];
- }
-
- return form;
- }
- /**
- * 处理navTab中的分页和排序
- * targetType: navTab 或 dialog
- * rel: 可选 用于局部刷新div id号
- * data: pagerForm参数 {pageNum:"n", numPerPage:"n", orderField:"xxx", orderDirection:""}
- * callback: 加载完成回调函数
- */
- function dwzPageBreak(options){
- var op = $.extend({ targetType:"navTab", rel:"", data:{pageNum:"", numPerPage:"", orderField:"", orderDirection:""}, callback:null}, options);
- var $parent = op.targetType == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
- if (op.rel) {
- var $box = $parent.find("#" + op.rel);
- var form = _getPagerForm($box, op.data);
- if (form) {
- $box.ajaxUrl({
- type:"POST", url:$(form).attr("action"), data: $(form).serializeArray(), callback:function(){
- $box.find("[layoutH]").layoutH();
- }
- });
- }
- } else {
- var form = _getPagerForm($parent, op.data);
- var params = $(form).serializeArray();
-
- if (op.targetType == "dialog") {
- if (form) $.pdialog.reload($(form).attr("action"), {data: params, callback: op.callback});
- } else {
- if (form) navTab.reload($(form).attr("action"), {data: params, callback: op.callback});
- }
- }
- }
- /**
- * 处理navTab中的分页和排序
- * @param args {pageNum:"n", numPerPage:"n", orderField:"xxx", orderDirection:""}
- * @param rel: 可选 用于局部刷新div id号
- */
- function navTabPageBreak(args, rel){
- dwzPageBreak({targetType:"navTab", rel:rel, data:args});
- }
- /**
- * 处理dialog中的分页和排序
- * 参数同 navTabPageBreak
- */
- function dialogPageBreak(args, rel){
- dwzPageBreak({targetType:"dialog", rel:rel, data:args});
- }
- function ajaxTodo(url, callback){
- var $callback = callback || navTabAjaxDone;
- if (! $.isFunction($callback)) $callback = eval('(' + callback + ')');
- $.ajax({
- type:'GET',
- url:url,
- dataType:"json",
- cache: false,
- success: $callback,
- error: DWZ.ajaxError
- });
- }
- function ajaxTodoPost(url, thisE, callback){
- var csrfVal = thisE.attr("csrfVal");
- var csrfName = thisE.attr("csrfName");
- var $callback = callback || navTabAjaxDone;
- if (! $.isFunction($callback)) $callback = eval('(' + callback + ')');
- $.ajax({
- type:'POST',
- url:url,
- dataType:"json",
- data: function(){
- var _data = {};
- if (csrfName && csrfVal) {
- _data[csrfName] = csrfVal;
- }
-
- return _data;
- }(),
- cache: false,
- success: $callback,
- error: DWZ.ajaxError
- });
- }
- /**
- * http://www.uploadify.com/documentation/uploadify/onqueuecomplete/
- */
- function uploadifyQueueComplete(queueData){
- var msg = "The total number of files uploaded: "+queueData.uploadsSuccessful+"<br/>"
- + "The total number of errors while uploading: "+queueData.uploadsErrored+"<br/>"
- + "The total number of bytes uploaded: "+queueData.queueBytesUploaded+"<br/>"
- + "The average speed of all uploaded files: "+queueData.averageSpeed;
-
- if (queueData.uploadsErrored) {
- alertMsg.error(msg);
- } else {
- alertMsg.correct(msg);
- }
- }
- /**
- * http://www.uploadify.com/documentation/uploadify/onuploadsuccess/
- */
- function uploadifySuccess(file, data, response){
- alert(data)
- }
- /**
- * http://www.uploadify.com/documentation/uploadify/onuploaderror/
- */
- function uploadifyError(file, errorCode, errorMsg) {
- alertMsg.error(errorCode+": "+errorMsg);
- }
- /**
- * http://www.uploadify.com/documentation/
- * @param {Object} event
- * @param {Object} queueID
- * @param {Object} fileObj
- * @param {Object} errorObj
- */
- function uploadifyError(event, queueId, fileObj, errorObj){
- alert("event:" + event + "\nqueueId:" + queueId + "\nfileObj.name:"
- + fileObj.name + "\nerrorObj.type:" + errorObj.type + "\nerrorObj.info:" + errorObj.info);
- }
- $.fn.extend({
- ajaxTodo:function(){
- return this.each(function(){
- var $this = $(this);
- $this.click(function(event){
- if ($this.hasClass('disabled')) {
- return false;
- }
-
- var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first"));
- DWZ.debug(url);
- if (!url.isFinishedTm()) {
- alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg"));
- return false;
- }
- var title = $this.attr("title");
- if (title) {
- alertMsg.confirm(title, {
- okCall: function(){
- ajaxTodoPost(url, $this, $this.attr("callback"));
- }
- });
- } else {
- ajaxTodoPost(url, $this, $this.attr("callback"));
- }
- event.preventDefault();
- });
- });
- },
- dwzExport: function(){
- function _doExport($this) {
- var $p = $this.attr("targetType") == "dialog" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();
- var $form = $("#pagerForm", $p);
- var url = $this.attr("href");
- //window.location = url+(url.indexOf('?') == -1 ? "?" : "&")+$form.serialize();
- var $iframe = $("#callbackframe");
- if ($iframe.size() == 0) {
- $iframe = $("<iframe id='callbackframe' name='callbackframe' src='about:blank' style='display:none'></iframe>").appendTo("body");
- }
- form.target = "callbackframe";
-
- }
-
- return this.each(function(){
- var $this = $(this);
- $this.click(function(event){
- var title = $this.attr("title");
- if (title) {
- alertMsg.confirm(title, {
- okCall: function(){_doExport($this);}
- });
- } else {_doExport($this);}
-
- event.preventDefault();
- });
- });
- }
- });
|