请问Ajax如何获取回调函数的返回值?

C#code[WebMethod]publicstaticstringGetPassword(){stringpassword=CommonFunctions.GetMi... C# code
[WebMethod]
public static string GetPassword()
{
string password = CommonFunctions.GetMixPwd(6);
return password;
}
#endregion

JScript code
function ResetPassword() {
return PageMethods.GetPassword(Password_CallBack);
}
function Password_CallBack(response) {
document.getElementById('hiddenPassword').value = response;
return confirm('The password has been reset to ' + response + ' , do you want to send email?');
}

HTML code
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<prog:Button ID="btnResetPwd" runat="server" Text="Reset Pwd" CssClass="ButtonUnfixed" ValidationGroup="2" OnClientClick="return ResetPassword();" onclick="btnResetPwd_Click"/>

我要获取回调函数的返回值
我指的是confirm('The password has been reset to ' + response + ' , do you want to send email?');的值返回到OnClientClick=“”中,
而confirm在
ResetPassword的回调函数Password_CallBack中,OnClientClick怎样才能得到confirm的值呢?
不好意思,逻辑有点转,不好表达,您费心理解下。谢谢!
展开
 我来答
is8888
2011-04-16 · TA获得超过695个赞
知道小有建树答主
回答量:530
采纳率:0%
帮助的人:569万
展开全部
呵呵,可不可以创建一个全局变量,比如A,先将confirm的返回值保存到临时变量(这是个局部变量,如TMP)中,在获取到confirm的值后,先将这个值赋给那个全局变量,如果需要的话可以先不忙返回值,先进行一些其他处理,在返回confirm的值。不晓得这个样子可否?如:
JScript code
// 先创建一个全局变量
var A = null;
function ResetPassword() {
return PageMethods.GetPassword(Password_CallBack);
}
function Password_CallBack(response) {
document.getElementById('hiddenPassword').value = response;
// 先别急着返回
var tmp = confirm('The password has been reset to ' + response + ' , do you want to send email?');
// 将返回结果赋值给全局变量
// 赋值给全局变量主要是考虑在当前函数外还要使用返回值的情况
A = tmp;
// 如果需要做一些其他的是的话,可以在这里执行,比如通过if语句判断是否需要执行等
if(A == true)
{
// 可以在这里干点事了
}
// 事情干完后就可以返回了
return tmp;
}
追问
不好意思,我的表述让你误解你了。
我是要把
return confirm('The password has been reset to ' + response + ' , do you want to send email?');
的值传送到
OnClientClick="return ResetPassword();" 内,即传给ResetPassword()。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangbo99_net
推荐于2016-11-08 · TA获得超过1465个赞
知道大有可为答主
回答量:922
采纳率:0%
帮助的人:1232万
展开全部
你好!
你的设计意图在引入ajax回调之后不可能实现了.
按你的设计目的,我建议你这样改进:

function Password_CallBack(response) {
document.getElementById('hiddenPassword').value = response;
//这里取消 return confirm('The password has been reset to ' + response + ' , do you want to send email?');
//改为:
if(confirm('The password has been reset to ' + response + ' , do you want to send email?'))
{
//在这里再发起一次ajax请求,在server端实现发送email重置密码的通知.
}
}

另一种解决方案是:
public static string GetPassword()加一个bool类型的参数sendEmail,在server端直接实现发送email.
在调用ajax请求GetPassword之前,先请用户 var sendEmail=confirm('The password has been reset to ' + response + ' , do you want to send email?');
把confirm返回的结果作为参数传给GetPassword方法.

最后 .一楼的解决方法看上去可行,但实际 运行时,A永远都是null.不会实现正确效果

有问题请再联系我,
追问
你好!你的回答对我的问题很有针对性。
你的第一种方案,我在
if(confirm('The password has been reset to ' + response + ' , do you want to send email?'))
{}
内再一次发起ajax请求中是需要获取'hiddenPassword'的值的,而后台的[WebMethod]是static函数,无法取得控件的值(或者说我不知道怎么取,因为一加上static,所有的控件下面冒出一条红色曲线。因此我尝试你提供的第二条方案,也遇到相同的问题。谢谢!
追答
恭喜你,做完下一步就完成了:

function Password_CallBack(response) {
document.getElementById('hiddenPassword').value = response;
//这里取消 return confirm('The password has been reset to ' + response + ' , do you want to send email?');
//改为:
if(confirm('The password has been reset to ' + response + ' , do you want to send email?'))
{
//在这里再发起一次ajax请求,在server端实现发送email重置密码的通知.
//response就是你的hiddenPassword
//说实话,是不需要使用hiddenPassword这个控件的...response就已经是重置过的密码了.
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式