iT邦幫忙

0

不同網頁間的表單連動

不明 2022-08-08 08:34:251412 瀏覽

有兩個表單,先稱為甲跟乙
裡面分別有A B C跟A B D四種分類
目前他們是分別在兩個網頁,並且是在前端用

$(this).on('change', function () {
    var val;
    val = $('#ID' + $(this).index()).val();
    Table.column($(this).index()).search(val).draw(); }

這個來進行表單篩選動作的

我想在甲那邊用C篩選出了新的結果,而他會一併連動影響到乙
大概就是利用C篩選後的A和B當作Key去同時篩選乙
讓我跳轉到乙表時能顯示相關聯的結果

就假如
兩張表合併會像[A1 B1 C1 D2]、[A2 B3 C1 D1]、[A1 B1 C2 D1]之類的
當我甲表選擇C1 篩選出了[A1 B1 C1]、[A2 B3 C1]
那麼我切換到乙表時,他會顯示[A1 B1 D2]、[A2 B3 D1]的結果

這能在前端就解決,還是得挪到後端進行呢?

實習工作一直以來都被要求進行後端工程,現在突然拿前端的內容要我修改有點讓我不知道該從何下手…
短時間內翻了各種文獻資料學習,但在從沒學過跟用過此程式語言的情況下真的有點難馬上反應可以用甚麼方式解決問題…
再拜託各位幫忙一下了TT


更新:大概架構長這樣..

SQL.cs

public DataTable Get_TableA()
{
    string lo_sSQLStr = "SELECT * FROM TableA ...";
    …
    …
}
public DataTable Get_TableB()
{
    string lo_sSQLStr = "SELECT * FROM TableB ...";
    …
    …
}

TableA.aspx

<script type="text/javascript">
    $(document).ready(function () {
        var TableA = $("#<%=Tb_A.ClientID%>").DataTable({
            initComplete: function () {  
                $('div.dataTables_scrollHeadInner thead tr#filterboxrow th').each(function() {
                    $(this).on('change', function () {
                        var val = $('#ID' + $(this).index()).val();
                        TableA.column($(this).index()).search(val).draw();

                        var data = "{ sPage: 'A', iIndex: " + $(this).index() + ", sValue: '" + val + "' }";
                        $.ajax({
                            type: "POST",
                            url: "Default.aspx/SetFilterSession",
                            data: data,
                            contentType: 'application/json; charset=utf-8',
                            async: false
                        });
                    });
                });
            }
        });

        $.ajax({
            type: "POST",
            url: "Default.aspx/GetFilterSession",
            data: "{ sPage: 'A' }",
            contentType: 'application/json; charset=utf-8',
            async : false,
            success: function (result) {
                if (result.d) {
                    $.each(result.d, function (index, object) { $('#ID' + object.Index).val(object.Value).trigger("change"); });
                }
            }
        });
    });
 </script>
看更多先前的討論...收起先前的討論...
抱歉我看不懂問題。。沒辦法幫上忙
不明 檢舉
試著增加了例子,不知道這樣會不會能讓人看懂呢TT?
表是指SQL Table嗎?還是Form Select?OR Jquery Table有沒有畫面或者示意圖?
=> 我想在甲那邊用C篩選出了新的結果
切換到乙表是 redirect 還是相同畫面只是隱藏?
我看起來還是很模糊 抱歉= = 可能是我的問題
我好像大概看懂了,如果切換表示redirect
可以採用Post帶資料 或者 Get帶QueryString 給乙表
乙的Jquery再針對參數做處理
或者是使用Cookie或是Session紀錄
要適當理解這兩種機制的清理模式
不明 檢舉
表單是在後端用SELECT * FROM先分別弄出完整的表單,然後才到前端進行篩選列印之動作;切換到乙表是redirect,是直接到另一個網頁
不明 檢舉
啊,好的,這邊去試試看TT 感謝您努力理解並幫助我,抱歉這邊的描述能力可能有點差QQ
froce iT邦大師 1 級 ‧ 2022-08-08 10:48:53 檢舉
2個網頁的話你就一定得用到後端,而且很麻煩,因為沒做特別處理,兩個網頁是無法連動的。

你得做server sent event/websocket才有可能做到伺服器主動
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-08-08 10:00:58

不是已經用POST解決了嗎?

看更多先前的回應...收起先前的回應...
不明 檢舉

確實正確來講應該要解決,但說其實目前連動帶到了選單的部分
再有相同的類型(Key之類的項目)上,會是正常的運作
但若移到後面不同的C與D的狀況,因為前一位開發者的寫法關係,會讓另一個表單的出現空白選項的錯誤,所以目前才又想在找尋其他辦法…

不明 檢舉

或許是自己哪裡理解或邏輯、使用上出現錯誤,正在努力查找資料文獻在解決…

不明 檢舉

這麼說好了,對方的寫法是依靠前端的選項搭配'$(this).index()'來進行表單篩選
可是他希望我在切換畫面時,可以保留選項選擇後的樣貌,又進行不同表格間的篩選連動(後續叫我弄出這個功能)
當時我成功弄成了選項在切頁面時會保留的狀況,因此目前只能說是我只保留選項選擇,用這方式讓頁面切換時能依靠那個選項來進行篩選
但問題就到了目前,當乙表沒有C項時,我就無法依靠這個方式來進行篩選

我建議你回到基本面來思考
如果現在要做出兩個完全不一樣的頁面
頁面1:有選項Key1,向後端查到資料Data1,顯示成結果Page1
頁面2:有選項Key2,向後端查到資料Data2,顯示成結果Page2
這樣很單純,是吧

接著是你的問題,頁面2和頁面1「很像而不一樣」
那就有幾種做法供參考
1.把 Key1 拿來用,加上其他的部份以組成 Key2,接著走原流程
這個方法最單純也容易實作。
2.把 Data1 拿來用,拿掉不要的,加上其他的部份(跟後端查詢的資料)以組成 Data2,接著走原流程
由於此做法「仍然要向後端查詢缺少的欄位」,同樣麻煩,因此一般會選第1種做法
3.其他做法
我沒看懂的你的做法

不明 檢舉

我目前是有幾個想法
1.在後端先弄一個兩表單合併的大表單,後續於大表單篩選後再於前端列印出甲乙各自的內容
但這方法基本上就等同於改寫整個原先的程式碼,與對方所說「你只要增加一些程式判定即可」的話語有衝突,所以我認為這不是對方所希望的解答,暫時作罷

2.在甲表用C篩選出結果後,儲存篩選後的A B項之資料,到乙表依靠儲存的資料進行篩選
但這方法由於對方如我主問題那邊詢問的狀況所說,對方是利用'Table.column($(this).index()).search(val)'val為選項選擇的結果(為單一值),來篩選出符合選項之表單結果
因此當C1篩選後若有A1跟A2的情況下,就無法依靠這方法進行篩選(又或者是我沒使用正確…?)

不過還是感謝您,目前我先循著您的建議來慢慢試試看

0

直接給你做法。
目前知道你有些頁面可能沒有這些值。
那就用

<input type="hidden" name="xxx" value="<?php echo $_POST['xxx'];?>" />

這樣的方式來暫存值。
這樣就算再切換其它頁面。你還是有這些值可以使用。

當然,其實最好的方式是寫成動態式網頁或是VUE。這樣永遠都不用擔心值消失。
只是你說了你前端不行。所以我就單純教你最原始的處理方法。

不明 檢舉

其實有點不太理解…是指用這個方式將此表有的值帶到另一個表,然後在那邊進行篩選嗎?如果是這樣的話,我該如何將此數值跟原先的表格一起使用?
因為目前表格的資訊是在後端用SELECT * FROM...的方式獲得的,這樣子連結不會讓另一個表格直接多出不屬於它的數據資料嗎?

以及我想順帶問問,我是否能利用search()一類的方式來直接篩選出多個資料@@?畢竟多個表間一定有項各自獨一無二的Key值,如果我能直接用Key來篩選或許會直觀…但找來找去似乎都沒類似的東西

多送值,不代表你要全用。
不要去想這種懶的想法。

就安全性而言。最基本的機制是在SQL上取其所用的值。
也不要直接用POST來組合SQL。

所以你「這樣子連結不會讓另一個表格直接多出不屬於它的數據資料嗎?」根本是多餘的。

至於後面的問題,我上面說了。這些都是基本的應用。
當然你會其它方式的話是OK的。
我只是告訴你原始招。

如要進階的話,其實會搭配前端語言及 formData 的特性來處理的。

不明 檢舉

或許是哪裡邏輯理解錯誤,還是有些模糊
最終還是依然不知道該如何使用…
目前的表單是放在<script>內搭配var Table_A = $("#<%=Tb_A.ClientID%>").DataTable()來進行部分樣式設定以及篩選,這情況下在內部使用HTML語法應該是錯誤的…?(如果架構上沒理解錯誤)
這幾天各種努力看懂了不同函式的意義及用途,但實際要應用卻怎麼弄都不對或是弄到一半(尤其是要準備篩選Table時)就會卡住不知道要用甚麼方法,因而無法繼續@@…

我要發表回答

立即登入回答