请问Ajax如何获取回调函数的返回值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问Ajax如何获取回调函数的返回值?相关的知识,希望对你有一定的参考价值。
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的值呢?
不好意思,逻辑有点转,不好表达,您费心理解下。谢谢!
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()。
你的设计意图在引入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就已经是重置过的密码了.
ajax回调函数回调无法获取返回值
function kakaajax(obj, callback) { //函数执行第一步传入两个参数(obj,callback(a))所以如果想在此处获取 ajax的返回值没门因为请求未发出callbcak的参数已经被注入; if (obj.type == ‘POST‘) { obj.data = JSON.stringify(obj.data) } common.httpMobileJson({ type: obj.type, url: obj.url + ‘.json‘, data: obj.data, success: function (data) { console.log(data) if (data.code == 200) { if (obj.templateName != ‘‘) { var html = template(obj.templateName, data) $(‘.‘ + obj.className).html(html) } // 请求成功之后的回调 if (callback != null) { callback(); //此处的参数在一开始已经被注入,只是在异步之后才去调用它的它取不到 返回的 data } } }, error: function (e) { console.log("操作失败"); } });
以上是关于请问Ajax如何获取回调函数的返回值?的主要内容,如果未能解决你的问题,请参考以下文章
ajax回调函数无法获取后台传过来的值(SSM框架),大神请指教!