iT邦幫忙

0

javascript內先後執行順序

    function login() {
            var User_ID = $('#login_user').val();
            var User_PSW = $('#login_psw').val();
            //var User_PSW = $('#des_1').text();
            //alert(User_PSW );
            $.ajaxSetup({ cache: false });
            $.ajax({
                type: 'post',
                url: "ashx/HdlChkSession.ashx",
                data: 'ID=LogIn&User_ID=' + User_ID + "&User_PSW=" + User_PSW,
                success: function (RntValue) {
                    var data = eval('(' + RntValue + ')');
                    if (data.success) {
                        parent.clearTime();  //將有設定setTimeout清除
                        parent.chkSession();  //登入後開始啟動setTimeout()檢查是逾時
                        parent.createMenu(data.User_ID, data.User_NM);
                    }
                    else {
                        alert('帳號密碼錯誤!!!');
                    }
                },
                async: false,
                error: function () { alert('Ajax檔案傳輸問題'); }
            })
        

    }
			
			如何在上述程式中加入document.all["BtnJia"].click();
			但必須先執行document.all["BtnJia"].click();取得值再執行原本 login()裡面的內容??
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
fillano
iT邦超人 1 級 ‧ 2016-05-11 14:47:32
最佳解答

好久沒看到document.all了,既然已經用了jquery,怎麼不使用?

另外,是否在BtnJia的onclick事件處理函數中呼叫login()就能解決你的問題?

看更多先前的回應...收起先前的回應...
isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-11 16:20:36 檢舉

您好
請教要如何在BtnJia的onclick事件處理函數中呼叫login(),小弟我本身是網管的,對這一塊是在不是很熟悉,大部分都是東拼西湊來的

fillano iT邦超人 1 級 ‧ 2016-05-11 17:50:54 檢舉

先問一下,你呼叫

document.all["BtnJia"].click();

是要做什麼?

isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-12 08:14:20 檢舉

裡面是負責將字串加密,然後傳給前端的label,javascript在取得加密後的值

fillano iT邦超人 1 級 ‧ 2016-05-12 10:28:25 檢舉

聽不懂XD

你可以執行觸發他click的事件(click()),表示他的onclick有一個事件處理函數在做字串加密這件事情。不過我不知道所謂的「前端的label」是什麼...這些事情看起來都在前端發生,都是用javascript在處理,所以我不知道「javascript在取得加密後的值」是怎麼回事...

isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-12 10:48:24 檢舉

前端有一個asp.net textbox,BtnJia的onclick事件會將textbox的值加密後,我前端還有一個label,label會等於加密的值,我在javascript的 var User_PSW 會取得label的再送到伺服器端做驗證

fillano iT邦超人 1 級 ‧ 2016-05-12 13:41:37 檢舉

看起來你是用WebForm...

WebForm的流程是這樣:

  1. 按下BtnJia
  2. postback,將頁面元件(TextBox, Button, Label等)的狀態post回伺服器
  3. 在伺服器執行觸發事件的程式,改變元件狀態等
  4. 顯示更新後的元件(繪製出改變後的html)

所以...這個你要取的值,已經先送到伺服器加密處理過,然後加到Label中,再重新繪製出頁面。然後你又要呼叫login(),同時把這個加密過的值再送回伺服器?剛剛這個過程中,明碼往伺服器送了一次,然後加密過值從伺服器收到,再用login()送出,總共兩次。這樣是你要的流程嗎?

isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-12 15:02:58 檢舉

是的,感覺好像有點多此一舉,不過我目前也想不到更好的做法

fillano iT邦超人 1 級 ‧ 2016-05-12 15:15:06 檢舉

這樣...你用開發工具看一下,Label的html(在我的機器上是用span實作的)的id屬性應該是固定的,你可以用瀏覽器的開發者工具看一下你要取的東西是怎麼放在Label,然後研究一下看看要怎麼取...

fillano iT邦超人 1 級 ‧ 2016-05-12 15:21:59 檢舉

另外,透過Label來取值有點怪,不妨參考這個:
Access JavaScript variables on PostBack using ASP.NET Code

isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-12 15:22:26 檢舉

其實我已經有取得Label的值,只是卡在一個按鈕要先後執行我的動作,目前都是加密最後才被執行

fillano iT邦超人 1 級 ‧ 2016-05-12 17:46:53 檢舉

如果程式流程無法大改,就有點麻煩XD

基本上你呼叫document.all["BtnJia"].click();之後的流程,就超過Javascript能掌握的範圍了,因為他會送出post,然後網頁重新載入,生命週期重新開始...

一種解法是,加上額外的狀態給伺服器跟前端程式做判斷。例如在網頁加入一段javascript,根據某個hidden input的值來判斷是否要在網頁載入完畢後,執行login(),並且把Label中取到的值給他。然後在呼叫document.all["BtnJia"].click();時,去改變這個hidden input的值...等等。

isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-13 08:17:40 檢舉

您好,在跟你請教一下,如果改流程的話,那我要如何做比較好??

fillano iT邦超人 1 級 ‧ 2016-05-13 11:30:43 檢舉

加密的動作也改用ajax送出,像login()這樣。(不過別問我怎麼做XD,我沒在用WebForm)

isaepfkeyr iT邦研究生 4 級 ‧ 2016-05-16 09:55:42 檢舉

謝謝熱心跟我討論,我大概有些想法了,在測試看看

我要發表回答

立即登入回答