在使用asp.net的Web服务中创建数据驱动的jquery下拉菜单时出错

问题描述

|| 我浏览了以下文章并实现了相同的用法,即我使用Web服务而不是WCF服务,当我运行以下html文件时,动态菜单不显示。请问我到底出了什么问题。 这是我的html文件
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
    <title>Sample Test Application</title>
 <style type=\"text/css\">
    .Menu
    {
        width:200px;
        text-align:center;
        border:solid 2px gray;
        padding:0px;
        background-color:Silver;
        cursor:hand;
        font-weight:bold;
    }

    .MenuItem
    {
        width:192px;
        text-align:center;
        border:solid 1px silver;
        padding:2px;
        background-color:whitesmoke;
    }

</style>
<script type=\"text/javascript\" src=\"Scripts\\jquery-1.4.1.js\">
 $(document).ready(function() {
    $.ajax(
    {
        type: \"GET\",url: \"http://localhost:50542/MenuItems.asmx/GetMenus\",contentType: \"application/json; charset=utf-8\",dataType: \"json\",success: CreateMenus,error: function(err) {
            alert(err.status + \" - \" + err.statusText);
        }
    }
    );
});


   function CreateMenus(results) {
 for (var i = 0; i < results.length; i++) {
  $(\"<div class=\'Menu\'>\" + results[i].Text + \"</div>\")
     .click({ MenuId: results[i].MenuId },OnMenuClick)
     .appendTo(\"#accordionContainer\");
 }
}


    function OnMenuClick(event)
     {
    $(\"div[id ^= \'menuItemGroup\']\").slideUp(500);
    $.ajax(
        {
            type: \"GET\",url: \"http://localhost:50542/MenuItems.asmx/GetMenuItems\",data: \'{\"menuId\":\"\' + event.data.MenuId + \'\"}\',success: function(items) {
                $(event.target).children().remove();
                var html = \"<div id=\'menuItemGroup\" + event.data.MenuId + \"\' style=\'display:none\'>\";
                for (var j = 0; j < items.length; j++) {
                    html += \"<div class=\'MenuItem\'> <a href=\'\" + items[j].NavigateUrl + \"\'>\"  + 
                    items[j].Text + \"</a></div>\";
                }
                html += \"</div>\";
                $(event.target).append(html);
                $(\"#menuItemGroup\" + event.data.MenuId).slideDown(500);
            },error: function(err) {
                alert(err.status + \" - \" + err.statusText);
            }
        }
        )
}       


</script>

</head>
<body>
<div id=\"accordionContainer\" ></div>
<div class=\"Menu\"></div>
<div class=\"MenuItem\"></div>
</body>
</html>
这是我的网络服务文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;

namespace ServiceMahe
{
    /// <summary>
    /// Summary description for MenuItems
    /// </summary>
    [WebService(Namespace = \"http://tempuri.org/\")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolBoxItem(false)]
    // To allow this Web Service to be called from script,using ASP.NET AJAX,uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class MenuItems : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return \"Hello World\";
        }



    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public Menu[] GetMenus()
        {
            SampleDataClassesDataContext db = new SampleDataClassesDataContext();
            List<Menu> menus = new List<Menu>();
            var temp = from item in db.Menus
                       select item;
            foreach (var obj in temp)
            {
                Menu m = new Menu();
                m.MenuId = obj.MenuId;
                m.Text = obj.Text;
                menus.Add(m);
            }
            return menus.ToArray();
        }



        [WebMethod]
        [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
         public MenuItems1[] GetMenuItems(int menuId)
        {
        SampleDataClassesDataContext db = new SampleDataClassesDataContext();
        List<MenuItems1> items = new List<MenuItems1>();
        var temp = from item in db.MenuItems
                   where item.MenuId == menuId
                   select item;
        foreach (var obj in temp)
        {
            MenuItems1 mi = new MenuItems1();
            mi.MenuId = (int)obj.MenuId;
            mi.MenuItemId = obj.MenuItemId;
            mi.Text = obj.Text;
            mi.NavigateUrl = obj.NavigateUrl;
            items.Add(mi);
        }
        return items.ToArray();
    }

    }
}
    

解决方法

        取消注释此行...
[System.Web.Script.Services.ScriptService]
解释在您的代码本身中。   允许此Web服务   使用ASP.NET从脚本调用   AJAX,取消注释以下行。