1. 程式人生 > >WebService、Ajax與回撥函式(一)

WebService、Ajax與回撥函式(一)

       本例項演示藉助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、結果展示



相關推薦

WebServiceAjax函式

       本例項演示藉助WebService、Ajax技術和回撥函式,從MSSQL資料庫中獲取所需資料,並用JavaScript語言將資料結果顯示到網頁地圖上。 1、WebService        (1)在工具箱的Ajax Extentions下面找到ScriptM

ajax函式done,fail,always

直接上程式碼 <!DOCTYPE html> <html> <head>     <meta charset="utf-8"><title>ajax</title><script type="te

JS中函式)

一.前奏 多用在使用 js 寫元件時,尤其是元件的事件很多都需要回調函式的支援 假設   A是回撥函式,B是呼叫者,B引數裡一個是指向A的函式指標,即回撥A,同時另外的引數傳遞給A作為引數 二.JS中函式可作為引數傳遞,甚至在另一個函式內部返回 一旦作為引數

JavaScript使用函式

AJAX - onreadystatechange 事件 菜鳥教程地址http://www.runoob.com/ajax/ajax-xmlhttprequest-onreadystatechange.html/*不使用回撥函式*/<!DOCTYPE html&g

函式

#include<stdio.h> // 方法指標的格式為:int(*ptr)(char *p) 即:返回值(指標名)(引數列表) typedefint (*CallBackFun)(char *p); // 為回撥函式命名,型別命名為 CallBackFun

【FreeRTOS】小白進階之任務如何共用FreeRTOS軟體定時器函式

介紹兩個定時器任務如何通過定時器 handle 共用一個回撥函式。 1、標頭檔案宣告和函式定義 #include "FreeRTOS.h" #include "task.h" #include "t

函式

回撥函式作用: 對於很多初學者來說,往往覺得回撥函式很神祕,很想知道回撥函式的工作原理。本文將要解釋什麼是回撥函式、它們有什麼好處、為什麼要使用它們等等問題,在開始之前,假設你已經熟知了函式指標。 (1)什麼是回撥函式? 簡而言之,回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引

淺談C/C++函式Callback& 函式指標

摘要:回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式。回撥函式不是由該函式的實現方直接呼叫,而是在特定的事件或條件發生時由另外的一方呼叫的,用於對該事件或條件進行響應。

JS之函式callback

1.什麼是回撥函式?   -- 簡單點說,一個函式被作為引數傳遞給另一個函式(在這裡我們把另一個函式叫做“otherFunction”),回撥函式在otherFunction中被呼叫。   --可以是匿名函式也可以是命名函式 2.回撥函式的特點   (1)自己定義的函式   (2)你沒有呼叫   (

【C/C++開發】函式指標函式

C++很多類庫都喜歡用回撥函式,MFC中的定時器,訊息機制,hook機制等待,包括現在在研究的cocos2d-x中也有很多的回撥函式。 1.回撥函式 什麼是回撥函式呢?回撥函式其實就是一個通過函式指標呼叫的函式!假如你把A函式的指標當作引數傳給B函式,然後在B函式中通過A函式傳進來的這個指標

【轉載】鉤子函式函式

在訊息處理機制中必不可少的一組CP,即回撥和鉤子。 鉤子的概念源於Windows的訊息處理機制,通過設定鉤子,應用程式可以對所有的訊息事件進行攔截,然後執行鉤子函式,對訊息進行想要的處理方式。 接下來是一段js程式碼,主要用於給btn設定點選的鉤子函式。 let btn = document.getEl

深入淺出函式知乎上看到最好的回答

回撥方法介紹之中國好室友篇(Java示例)前言在Java社群的各種開源工具中,回撥方法的使用俯拾即是。所以熟悉回撥方法無疑能加速自己對開源輪子的掌握。網上搜了一些文章,奈何對回撥方法的介紹大多隻停留在什麼是回撥方法的程度上。本篇文章嘗試從回撥方法怎麼來的、為什麼要使用回撥方法以及在實際專案中如何使用等方面來介

將類的成員函式作為函式篇:友元函式

問題的提出  我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式才能訪問類的私有成員,程式中的其他函式是無法訪問私有成員的。非成員函式可以訪問類中的公有成員,但是如果將資料成員都定義為公有的,這又破壞了隱藏的特性。另外,應該看到在某些情況下,特別是在對某些成員函式多次呼叫時,由於引數傳遞,型別檢查和安全性

Ajax非同步函式(callback)

ajax請求確實是非同步的,不過這請求是由瀏覽器新開一個執行緒請求,當請求的狀態變更時,如果先前已設定回撥,這非同步執行緒就產生狀態變更事件放到 JavaScript引擎的處理佇列中等待處理。見:htt

Lua 入門學習教程(二) 函式 函式

還記得開始學C語言的時候,書上就拿兩個數相加 作為例子,來介紹函式。我也拿 Add 來說吧。 函式的簡單寫法就像下面的Add local function Add( a,b ) -- body print(a+b) end Add(10,20) 然後面向物件 loca

深入淺出剖析C語言函式指標函式()

關於靜態庫和動態庫的使用和製作方法。http://blog.csdn.net/morixinguan/article/details/52451612今天我們要搞明白的一個概念叫回調函式。什麼是回撥函式?百度的權威解釋如下:回撥函式就是一個通過函式指標呼叫的函式。如果你把函式

C#委託,事件函式

using System;using System.Collections.Generic;using System.Text;namespace TestApp{    ///<summary>/// 委託    ///</summary>///<param name="s1

java的反射函式(二)

所謂回撥,就是客戶程式C呼叫服務程式S中的某個函式A,然後S又在某個時候反過來呼叫C中的某個函式B,對於C來說,這個B便叫做回撥函式。例如Win32下的視窗過程函式就是一個典型的回撥函式。一般說來,C不會自己呼叫B,C提供B的目的就是讓S來呼叫它,而且是C不得不提供。由於S

Java 函式傳統方法和lambda方法-一個例子秒懂

背景: 想寫一個工具類 Tool.java ,其中方法 public void readOneLine() 負責一行一行地讀檔案,然後根據不同的業務,對每一行進行不同處理。最後輸出到檔案 out.txt 那麼問題來了,根據不同的業務,進行不同處理 怎麼實現?

Ajax請求函式沒有被呼叫

    $.ajax({        type:"post",        url:"http://172.16.41.91:8080/FcsServletSSM/users/register",