问题描述
||
我浏览了以下文章并实现了相同的用法,即我使用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,取消注释以下行。