请问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的值呢?
不好意思,逻辑有点转,不好表达,您费心理解下。谢谢!

参考技术A 呵呵,可不可以创建一个全局变量,比如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()。

参考技术B 你好!
你的设计意图在引入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框架),大神请指教!

如何在外面引用js中ajax回调函数中的值

js怎样获取调用回调函数的参数值

从ajax的回调函数(success等)中取返回值

笔记关于jq $.ajax 函数 success回调函数不能赋正确值或返回正确值的问题

请问啥叫回调方法?