DWZ使用中遇到的坑


DWZ官方文檔中關於文件上傳表單的提交:

因為Ajax不支持enctype="multipart/form-data" 所以用隱藏iframe來處理無刷新表單提交. 

<form method="post" action="url" class="pageForm required-validate" enctype="multipart/form-data"
onsubmit="return iframeCallback(this, [navTabAjaxDone/dialogAjaxDone]);">

服務器端響應
DWZ-v1.2版本開始服務器返回和validateCallback格式保持一致:

{
    "statusCode":"200", 
    "message":"操作成功", 
    "navTabId":"", 
    "rel":"",
    "callbackType":"closeCurrent",
    "forwardUrl":""
}

 第一個坑是,因為要上傳文件,所以表單必須使用隱藏iframe的方式來處理,可是服務端返回的數據必須是JSON格式的,而不能使html,所以處理后的數據就不能展示了,只能說是提示操作狀態。

第二個坑是,因為上傳文件后在服務端分析數據后需要去展示,所以想着以彈窗的方式去展示,卻發現了另外一個坑,事情是這樣的:

dialog鏈接擴展:

<a href=”xxx” target=“dialog” [rel=“dialogId”]>

A所指向頁面將會在dialog 彈出層中打開,rel標識此彈出層的ID,rel為可選項。

Html標簽擴展方式示例:

<a href="w_dialog.html" target="dialog" rel="page2">彈出窗口</a>
或
<a href="demo_page1.html" target="dialog" [max=true, mask=true, maxable=true, minable=true, resizable=true,drawable=true]
rel="dlg_page1" title="[自定義標題]" width="800" height="480">打開窗口一</a>

關閉窗口:
在彈出窗口頁面內放置<button class="close" value="關閉"></button>即可。

JS調用方法示例:

$.pdialog.open(url, dlgId, title);
或
$.pdialog.open(url, dlgId, title, options); 

也就是說要想在頁面打開一個彈窗,就必須要加載一個頁面,指定一個地址,不然的話就給你報錯。。。為啥不能展示本地數據呢。。。好蛋疼的設計。

為了展示數據,於是乎在分析完文件數據后將結果存到了memcache中,然后返回一個Key放到了返回json中,好在可以自定義回調函數,將key放到一個連接中通過jQ模擬提交,通過另一個頁面展示出來。擦,好糾結的業務邏輯。。。淚奔了。。。

自定義的回調函數:

    // 彈出被覆蓋的數據
    function customAjaxDone(json){
        if (json.statusCode == DWZ.statusCode.ok){
            if (json.content.toString() == "xxx"){
                DWZ.ajaxDone(json);
            } else {
                $("#xxx").attr("href", "{{ wrap_url('xxx/show_replace_data?hash=')}}" + json.content);
                $("#xxx").click();
            }
        }
        else{
            DWZ.ajaxDone(json);
        }
    }

表單事件:

onsubmit="return iframeCallback(this, customAjaxDone);"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM