请在安装了 Asp.Net Ajax 的环境下进行本测试。
1、新建一AJax Enabled页面,页面中添加 ScriptManager,并设置 EnablePageMethods="true"。加入 6 个 TextBox ,依次命名为:
xtbox1,xtbox2,xtbox3,xtbox4,xtbox5,tboxJs。
2、服务器端方法 Test 标记为 static ,并添加方法属性:
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
3、在 js 调用方法中使用 PageMethods.ServerMethodName(callBackFunction); 调用,其中 ServerMethodName 为服务器端方法名,callBackFunction 为客户端回调方法。
使用多个参数的回调方法时,代码如下:
PageMethods.CheckLogName(logName,function (res) { callback(res,'para');});
其中:
logName 为服务端方法的参数。
res 为回调函数接收到的返回值
para 为回调函数的参数,有需要时再加
回调函数如下:
function callback(res, para)
{
……
}
4、在回调方法中使用取到的返回值。
5、完整的例子代码如下:
Server 端:
protected void Page_Load(object sender, EventArgs e)
{
tboxJs.Enabled = false;
// 注意下行中没有传送 xtbox4 ,则在 tboxJs 上点右键时 xtbox4 将没有值
tboxJs.Attributes.Add("oncontextmenu", "CallServerMethod('xtbox1,xtbox2,xtbox3,xtbox5,tboxJs'); return false;");
}
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[,] Test(string eleNameList)
{
Random ra = new Random();
string[] eleNames = eleNameList.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string[,] results = new string[eleNames.Length, 2];
for (int i = 0; i < eleNames.Length; i++)
{
results[i, 0] = eleNames[i];
results[i, 1] = ra.Next() + "";
}
return results;
}
Client 端:
<script language="javascript" type="text/javascript">
function CallServerMethod(cList) {
PageMethods.Test(cList, jsCallBack);
}
function jsCallBack(rtn)
{
for(var i = 0;i<rtn.length/2;i++)
{
var eleName = rtn[2 * i];
var eleValue = rtn[2 * i + 1];
document.getElementById(eleName).value=eleName + " : " + eleValue;
}
}
</script>
用 AJax 技术实现 JavaScript 访问服务器端方法
最新推荐文章于 2023-03-04 22:36:32 发布