jquery ajax 在回调函数内 给变量赋值,为什么返回不出去?那要怎么处理

比如jquery代码如下functionUpdateModel(){varretVal=-1;//初始值varmodel=newObject();model.userID... 比如jquery代码如下
function UpdateModel() {
var retVal = -1;//初始值
var model = new Object();
model.userID = $("#txtUserId").val();
model.UserName=$("#txtUserName").val();
MyTestAjaxWebservice.WebService.UpdateModel(
model,
function(data) {
if (data > 0) {
alert(data);//这里值为1。反正webservice里的方法是成功的,数据库也更新成功了。
retVal = data;//注意这里。。。。
}
}, onFailed
);
alert(retVal);// 这里的值,永远都是-1也就是回调函数赋值不成功
}

这里是 webservice的方法:改方法是绝对可以成功执行的,请不要在此做文章。

[WebMethod]
public int UpdateModel(UserT model)
{
return sqlhelper.UpdateUser(model);
}
编程环境
ASP.NET 下
展开
 我来答
chen604xia
2010-07-16 · 超过12用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:18.8万
展开全部
在jquery里异步请求时后面的代码不会等你的请求返回数据后再执行,也就是说alert(retVal);执行时你的ajax可能还没返回数据,也就是说你的全局变量retVal没有被重新赋值,也就是还是以前的那个-1,我以前也是这个问题 ajax为异步请求,顾名思义它的请求时跟你的js同时执行的,所以要对ajax返回结果进行相应的操作都是写在它的回调函数里,即: success:function(data){...}里面,这样说你可能不太明白,举个例子
var re = 0;
function test(){
alert(re);//num1
re = testAjax();
alert(re);//num3
}
function testAjac(){
$.ajax({
type:"post",
url:"",
dataType:"json",
success:function(data){
re = 1
alert(re);//num2
}
});
}
上面执行alert的顺序肯定是num1,num3,num2,并且alert出来的值是0,0,1;
当然如果你的请求足够快(几乎不可能),快到比本页面还快,那么顺序就会是num1,num2,num3了
百度网友69975fa
推荐于2018-03-22 · TA获得超过669个赞
知道小有建树答主
回答量:1523
采纳率:0%
帮助的人:909万
展开全部
1 全局变量的作用域是全局性的,即在整个JavaScript程序中,全局变量处处都在。
2 而在函数内部声明的变量,只在函数内部起作用。这些变量是局部变量,作用域是局部性的;函数的参数也是局部性的,只在函数内部起作用。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
amwih001
2010-07-13 · TA获得超过2.3万个赞
知道大有可为答主
回答量:1529
采纳率:100%
帮助的人:678万
展开全部
function UpdateModel() {
var retVal = -1;//初始值
var model = new Object();
model.userID = $("#txtUserId").val();
model.UserName=$("#txtUserName").val();
MyTestAjaxWebservice.WebService.UpdateModel(
model,
function(data) {
if (data > 0) {
alert(data);//这里值为1。反正webservice里的方法是成功的,数据库也更新成功了。
retVal = data;//注意这里。。。。
alert(retVal + "ajax成功");
}else {
alert("不成功!");
}
}, onFailed
);
//alert(...)不再写在ajax函数外面 因为当你alert的时候ajax还在执行 并没有执行到retVal = data;这一步,这就是ajax异步执行的特点 如果你要alert 必须在ajax函数里面。
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lymlove317
2010-07-14 · TA获得超过178个赞
知道答主
回答量:239
采纳率:100%
帮助的人:63.1万
展开全部
function(data) {
if (data > 0) {
alert(data);//这里值为1。反正webservice里的方法是成功的,数据库也更新成功了。
retVal = data;//注意这里。。。。
}
},
alert(retVal);// 这里的值,永远都是-1也就是回调函数赋值不成功
出了这个大括号 函数 当然失效了 永远都是-1啊 在里面还差不多...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蝴蝶飞起来了
2010-07-13 · TA获得超过1058个赞
知道小有建树答主
回答量:834
采纳率:50%
帮助的人:695万
展开全部
ajax的时候,回调函数实际上已经和原函数分离了。所以ajax的回调方法,要写在处理函数里面,而不是外面的函数里。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式