AJAX 异步调用WebService

fengwanzk 2012-10-13 04:26:12
页面中的脚本如下:

function btnInvoke_onclick()
{
var theName = document.getElementById("tbName").value;
SimpleWebService.SayHello(theName, onSayHelloSucceeded);//此处出错。
}

function onSayHelloSucceeded( result )
{
document.getElementById("result").innerHtml = result;
}


aspx页面文件:

<from id="form1" runat="server">
<asp:ScriptManager ID="sm" EnablePateMethods="true" runat="server">
<Service>
<asp:ServiceReference Path="Services/SimpleWebService.asmx" />
</Service>
</asp:ScriptManager>
<div>
<input id="tbName" type="text" />
<input id="btnInvoke" type="button" value="Say Hello" onclick="return btnInvoke_onclick()
" />
<div id="result" ></div>
<div>
</from>


SimpleWebService.asmx文件中的内容:

......
using System.Web.Script.Service;
......

namespace WebApplication1
{
....
....
[ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
[WebMethod]
public string SayHello( string name )
{
return string.Format( "Hello {0}!", name );
}
}
}


出现的错误是:
Microsoft JScript 运行时错误:‘SimpleWebService’未定义。


我在网上找了一些说法:
1. 路径问题:该webservice文件时建立在WebApplication1下的,与页面在同一个文件夹下。
2. 添加命名空间,由于该webservice文件时建立在WebApplication1下的,因此命名空间与CS文件的命名空间是一致的,如果硬要写成:

WebApplication1.SimpleWebService.SayHello(theName, onSayHelloSucceeded);

错误就是WebApplication1未定义。

该程序是从网上的某个博客中找到的,据博主所说,内容出自“APS.NET AJAX 程序设计”。

请教怎么处理,谢谢!
...全文
263 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
riyejiancheng 2012-10-14
  • 打赏
  • 举报
回复
学习学习
fengwanzk 2012-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
Services/SimpleWebService.asmx 这里为什么会有个目录Services呢?
[/Quote]
不知道他这个是这么弄的,多了个Services文件夹,开始我还以为是所有的WebService都会有的呢,可是又没有看见哪里有关于这个文件夹的说明,搞得好奇怪。

另外,我是在同一个工程里建的WebService类和页面部分,我把Services部分去掉,还是出错。
fengwanzk 2012-10-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
在web service中写成这样试试[WebService(Namespace = "http://tempuri.org/")]
[System.Web.Script.Services.ScriptService]
public class SimpleWebService : System.Web.Services.WebService

然后再用你原来的方法试试,看会不会出错
[/Quote]
好的,我下午试试。
  • 打赏
  • 举报
回复
Services/SimpleWebService.asmx 这里为什么会有个目录Services呢?
wyumening 2012-10-13
  • 打赏
  • 举报
回复
在web service中写成这样试试[WebService(Namespace = "http://tempuri.org/")]
[System.Web.Script.Services.ScriptService]
public class SimpleWebService : System.Web.Services.WebService

然后再用你原来的方法试试,看会不会出错
吾非大神 2012-10-13
  • 打赏
  • 举报
回复
能看到高人回复帖子

真的很爽啊

可以学到除了问题以外的更多东西
fengwanzk 2012-10-13
  • 打赏
  • 举报
回复
非常感谢,我先下点jQuery的资料看看。
不过,我还是想知道我的程序错在哪里了?
孟子E章 2012-10-13
  • 打赏
  • 举报
回复
ScriptManager不是很好的东西

使用jQuery 吧,简单

jQuery Ajax 调用 WebService 返回数据表(DataTable)的方法。

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 runat="server">
<title>jQuery Ajax 调用 WebService 返回数据表(DataTable)的方法。</title>
<script type="text/javascript" src="jquery-1.5.js"></script>
<script type="text/javascript">
function ParseDate(jsonDate) {
var date = new Date(parseInt(jsonDate.substr(6)));
return date.toLocaleString();
}
function GetData() {
$.ajax({
type: "post", //注意这里是 post
url: "WebService.asmx/GetDataTable",
data: "{\"id\":\"8888\"}",
contentType: "application/json;charset=utf-8", //提交数据的方法格式
dataType: "json", //返回数据的格式
success: function (result) {
//你可以 alert(result.d)看数据返回的格式
data = jQuery.parseJSON(result.d);
t = "<table border='1'>";
$.each(data, function (i, item) {
t += "<tr>";
t += "<td>" + item.UserId + "</td>";
t += "<td>" + item.Name + "</td>";
t += "<td>" + item.Count + "</td>";
t += "<td>" + ParseDate(item.CreateDate)+ "</td>";
t += "</tr>";
})
t += "</table>";
$("#result").html(t);
},
error: function (result) { alert(result.responseText); }
});
}
window.onload = GetData;

</script>
</head>
<body>
<div id="result"></div>
</body>
</html>


后台的WebService代码:
WebService.asmx 代码

<%@ WebService Language="C#" Class="WebService" %>

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Serialization;
using System.Collections;
using System.Collections.Generic;
using System.Data;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{

[WebMethod]
public String GetDataTable(int id)
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("Count", typeof(System.Double)));
dt.Columns.Add(new System.Data.DataColumn("CreateDate", typeof(System.DateTime)));
dt.PrimaryKey = new System.Data.DataColumn[] { dt.Columns["UserId"] };
System.Random rd = new System.Random();
for (int i = 0; i <6; i++)
{
dr = dt.NewRow();
dr[0] = i + i;
dr[1] = "【孟子E章】" + id.ToString();
dr[2] = System.Math.Ceiling(rd.NextDouble() * 1000);
dr[3] = DateTime.Now.AddDays(rd.Next(100) - rd.Next(100));
dt.Rows.Add(dr);
}

System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row = null;

foreach (DataRow dr1 in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr1[col]);
}
rows.Add(row);
}
return serializer.Serialize(rows);
}
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧