車の情報まとめアプリ07(車両情報_PageMethodsの使用)

■車両情報の表示について修正する(その2)。
ASP.NETのボタンから javascript の function を実行する方法や、javascript の中でASP.NETの function を実行する方法があることが分かったけど、まだ思うように動かせない。

ASP.NETのボタンから javascript を実行する方法では、関数の中でjQueryのappendを使ってHTMLの<body>に構文を追加するけど、追加後になぜかすぐ消えてしまう。実行を、ASP.NETのボタンからHTMLのボタンにするとこの現象は消える。理由はよく分からないけど、ASP.NETのボタンを無理に使う必要もないため、この方法はやめる。

次に、javascript の中でASP.NET を実行する方法では、データがうまく取れなかった。
下のようなコードで、引数に車両の名前を入れて、ASP.NET の function の中でその車両のスペックデータを取りだすことを考えていたけど、sampleDataが undefined になってしまう。

            let sampleData = PageMethods.getVehicleSpec(vehicleName);

前回は、サーバ側の処理が完了する前に次に進んでしまいsampleDataにデータが入らないのかと思っていたけど、どうやらPageMethodsの構文が違っていたよう。

下のように、OnSuccess と OnError を入れると OnSuccess の response として、スペックデータが返ってきた。

            PageMethods.getVehicleSpec(vehicleName, OnSuccess, OnError);
            function OnSuccess(response) {
                sampleData = response;
            }
            function OnError(error) {
                alert(error);
            }

また、この function OnSuccess (response) は、ASP.NETで処理した後、そのレスポンスが返ってきたときに実行されるようで、これらの下に javascript を記述していると、それが先に実行される。そのため、OnSuccess 内にHTMLへの構文の追加などの処理も入れて、最終的に下のようなコードにした。

    <script>

        function popupVehicleSpec() {

            let vehicleName = document.getElementById('<%= DropDownList2.ClientID %>').value

            PageMethods.getVehicleSpec(vehicleName, OnSuccess, OnError);
            function OnSuccess(response) {
                sampleData = response;

                $(function () {
                    if ($('#sampleLayer').length) {
                        $('#sampleLayer').show()
                    }
                    else {
                        $("body").append("<div id='sampleLayer'>" + sampleData + "</div>")

                        let sampleLayerCss = {
                            opacity: "80%",
                            width: "300px",
                            height: "200px",
                            "background-color": "white",
                            border: "dotted",
                            position: "absolute",
                            top: "200px",
                            left: "10px",
                        }
                        $('#sampleLayer').css(sampleLayerCss);
                    }

                    $('#sampleLayer').click(function () {
                        $(this).hide()
                        $('#sampleLayer').hide()
                    })
                });

            }
            function OnError(error) {
                alert(error);
            }
        }
    </script>

HTMLのボタンを押すことで、popupVehicleSpec の関数が実行される。

実行結果が下のもの。少し動かしてみたけど、問題なく情報が更新されているよう。

情報表示についてはこれで終わり。あとは情報登録について少し考えてみる。