当前位置 : 主页 > 网页制作 > Nodejs >

WebService、Ajax与回调函数(一)

来源:互联网 收集:自由互联 发布时间:2021-06-24
本实例演示借助WebService、Ajax技术和回调函数,从MSSQL数据库中获取所需数据,并用JavaScript语言将数据结果显示到网页地图上。 1、WebService (1)在工具箱的Ajax Extentions下面找到ScriptMa

       本实例演示借助WebService、Ajax技术和回调函数,从MSSQL数据库中获取所需数据,并用JavaScript语言将数据结果显示到网页地图上。

1、WebService

       (1)在工具箱的Ajax Extentions下面找到ScriptManager控件,拖到网页上,右键属性,打开Services集合,将Path设为WebService.asmx,如下图所示:


       (2)打开App_Code中的WebService.cs,一定要做到取消对[System.Web.Script.Services.ScriptService]行的注释,然后开始编写WebService,该实例写一个从NMET数据库的school表中获取信息(包括学校名称,经纬度等),将结果凑成一个JSON格式的字符串。

[WebMethod]
    public string GetSchool()
    {
        string SQL = "SELECT * FROM SCHOOL";
        string st;
        MyDBase DB = new MyDBase(".", "NMET");
        SqlDataReader RD = DB.DBDataReader(SQL);
        st = "[";
        while (RD.Read())
        {
            st = st + "{sname:\'" + RD["sname"].ToString().Trim() + "\',lnglat:[" + RD["LNG"].ToString().Trim() + "," + RD["LAT"].ToString().Trim() + "],info:\'"+RD["SAdd"].ToString().Trim()+"\'},";
        }
        int n = st.Length - 1;
        st = st.Substring(0, n);
        st = st + "]";
        DB.DBClose();
        return st;
    }
2、回调函数

       (1)采用eval()函数,将JSON格式字符串转化为对象;

       (2)将WebService中获取的学校名称添加到下拉列表框中;

       (3)将坐标信息以点的形式显示到天地图上;

       (4)对点添加鼠标点击和鼠标移动事件。

function init() 
{
    var S = new WebService();
    S.GetSchool(getschool);
}
//回调函数
function getschool(e) {
    var LNG, LAT;
    var s;
    s = eval('(' + e + ')');
    LNG = parseFloat(s[0].lnglat[0]);
    LAT = parseFloat(s[0].lnglat[1]);
    var lnglats = new Array();
    var names = new Array();
    var URLs = new Array();
    var INFO = new Array();
    var infoWin;
    document.getElementById("school").options.length = 0;
    for (var i = 0; i < s.length; i++) 
    {
        var lat, lng;
        lng = parseFloat(s[i].lnglat[0]);
        lat = parseFloat(s[i].lnglat[1]);
        lnglats[i] = new TLngLat(lng, lat);
        names[i] = String(s[i].sname);
        URLs[i] = String(s[i].url);
        INFO[i] = String(s[i].info);
        document.getElementById("school").options.add(new Option(names[i], names[i]));
    }
    for (var i = 0; i < lnglats.length; i++) 
    {
        (
                function(n) {
                    var marker = new TMarker(lnglats[n]);
                    map.addOverLay(marker);
                    TEvent.addListener(marker, 'click', function() {
                        var truthBeTold = window.confirm("请你选择:点击“确定”进行地图定位,点击“取消”进入学校主页")
                        if (truthBeTold) Locate(s[n].sname);
                        else window.open(URLs[n]);
                    });

                    TEvent.addListener(marker, 'click', function() {
                        Locate(s[n].sname); //点击进行学校地图定位
                    });
                    TEvent.addListener(marker, 'mouseover', function() {
                        infoWin = marker.openInfoWinHtml("这里是“" + names[n] + "”," + INFO[n] + ",请点击!");
                        //infoWin.setTitle("提示");
                        //infoWin.setLabel('<a href="http://www.baidu.com" target="_blank">URLs[n]</a>');
                        //infoWin.closeInfoWindowWithMouse(); //该方法不太灵活,自编关闭函数
                    });
                    TEvent.addListener(marker, 'mouseout', function() {
                        infoWin.closeInfoWindow();
                    });
                }
         )(i);
    }
}

3、结果展示

网友评论