对于这样的问题,有很多解决方法,如果你返回的内容是简单的内容,如注册用户时候的验证信息,只需返回存在与否,那么可以采用下面最最简单的代码实现:
c# 代码
<%@ page language="c#" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<script runat="server">
//测试方法1
public string getsimplemethod(string inputdata)
{
//业务处理。
return 你输入的值: + inputdata;
}
protected void page_load(object sender, eventargs e)
{
if (request.querystring[input] != null)
{
response.clearcontent();
response.write(getsimplemethod(request.querystring[input]));
response.end();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="head1" runat="server">
<title></title>
<script type="text/javascript">
var textbox1 = <%=textbox1.clientid %>;
function getdata() {
var t = document.getelementbyid(textbox1);
var h = window.xmlhttprequest ? new xmlhttprequest() : new activexobject(msxml2.xmlhttp);
h.open(get, <%=request.filepath %>?input= + encodeuricomponent(t.value) + & + date.parse(new date()), true);
h.setrequestheader(connection, close);
h.onreadystatechange = function() {
if (h.readystate == 4) {
if (h.status == 200) {
document.getelementbyid(info).innerhtml = h.responsetext;
}
}
}
h.send(null);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:textbox id="textbox1" runat="server"></asp:textbox>
<asp:button id="button1" runat="server" text="调用服务器方法 getsimplemethod" onclientclick="getdata();return false;" />
<div id="info"></div>
</form>
</body>
</html>
对于需要返回复杂的对象,则需要对对象进行序列化等的处理,可以采取下面的简单方法。使用这个方法需要注意以下3点:
1,后台方法必须标记为 [system.web.services.webmethod] 属性;
2,后台方法必须是 static 类型的静态方法;
3,scriptmanager 必须设置 enablepagemethods=true。
aspx 代码
<%@ page language="c#" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<script runat="server">
//测试方法1
[system.web.services.webmethod]
public static string getsimplemethod(string inputdata)
{
return 你输入的值: + inputdata;
}
//测试方法2
[system.web.services.webmethod]
public static system.collections.generic.list<bloguser> getlistobjectmethod(int inputdata)
{
system.collections.generic.list<bloguser> ulist = new system.collections.generic.list<bloguser>();
system.random r = new random();
for (int i = 0; i < 6; i++)
{
bloguser u = new bloguser();
u.username = 孟宪会 + inputdata.tostring();
u.score = r.next(0, 100);
ulist.add(u);
}
return ulist;
}
//用于返回的测试类。
public class bloguser
{
public string username { set; get; }
public int32 score { set; get; }
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="head1" runat="server">
<title></title>
<script type="text/javascript">
var textbox1 = <%=textbox1.clientid %>;
function getdata1() {
pagemethods.getsimplemethod(document.getelementbyid(textbox1).value, onsucceeded1, onfailed);
}
function getdata2() {
pagemethods.getlistobjectmethod(document.getelementbyid(textbox1).value, onsucceeded2, onfailed);
}
function onsucceeded1(result, usercontext, methodname) {
alert(result)
}
function onsucceeded2(result, usercontext, methodname) {
alert(result)
var html = <table border=1>;
for (var i = 0; i < result.length; i++) {
html += "<tr>;
html += <td> + result[i].username + </td><td> + result[i].score + </td>;
html += </tr>;
}
html += </table>;
document.getelementbyid(info).innerhtml = html;
}
function onfailed(error, usercontext, methodname) {
if (error !== null) {
alert(调用方法错误: + error.get_message());
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:scriptmanager id="scriptmanager1" runat="server" enablepagemethods="true" />
<asp:textbox id="textbox1" runat="server"></asp:textbox>
<asp:button id="button1" runat="server" text="调用服务器方法 getsimplemethod" onclientclick="getdata1();return false;" />
<asp:button id="button2" runat="server" text="调用服务器方法 getlistobjectmethod" onclientclick="getdata2();return false;" />
<div id="info"></div>
</form>
</body>
</html>