jquery中的$.post()中的回调函数中能设置外界参数的值吗?

$(function(){
//获取表单元素设置其提交函数
$.("#form").submit(function(){
var t = false;
$.post(
"login.action",
{"id":id,"pwd":pwd},
function(data){
//传回来的值是true或false
if(data=="true"){
t = true;//修改外界t的值
alert(t);//此处如果程序能进来,t=true
}else{
t = false;//修改外界t的值
}
},"text"
);
alert(t);//即使data为true进入了if函数,但t值为什么不改变?t=false
return t;
});
)};

你在页面有两个alert,,应该会出现两次才对。第一次应该是false,第二次应该由data来决定。因为你使用的是AJAX,默认是异步的,因此当代码执行到$.post()时,并不会等它结果,而是继续向下执行,到了第二个alert的位置,这时t应该还是最初你设定的var t = false;所以会显示false.

还有,alert()会中断正在执行的代码。不太方便测试某变量的值,你可以将此变量的值写入一个窗口内,比如将alert(t);改为$("title").html(t);//将t的值写进页面的title中,可以直接在浏览器看到。追问

估计原因是这样的,回调函数中值确定已经改变,我试着改成同步试下

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-30
因为你这个是匿名函数的原因吧。

你试着把那段代码提出来作为一个函数试试。
同时把var t提出来到 $(function...外面。追问

提取函数为function f(){},然后在action标签的onsubmit="return f();"效果还是一样的,没用啊

追答

不是,是把下面这个提取出去

function(data){
//传回来的值是true或false
if(data=="true"){
t = true;//修改外界t的值
alert(t);//此处如果程序能进来,t=true
}else{
t = false;//修改外界t的值
}
}

追问

回调函数无法提取出来的,那是$.post()的固定格式

追答

试试这么定义t
this.t = false;

第2个回答  2013-05-30
变量scope的关系。
修改方法,把var t = false;放到函数外部,作为全局变量追问

我也试过了,还是一样,变量结果在post回调函数内可以改变,出了post后就自动变回去了

追答

var t = false;

$(function(){
//获取表单元素设置其提交函数
$.("#form").submit(function(){
$.post(
"login.action",
{"id":id,"pwd":pwd},
function(data){
//传回来的值是true或false
if(data=="true"){
t = true;//修改外界t的值
alert(“t changed to true");//此处如果程序能进来,t=true
}else{
t = false;//修改外界t的值
}
},"text"
);
alert(t);//即使data为true进入了if函数,但t值为什么不改变?t=false
return t;
});
)};

你确定试过了?

追问

确定,变量提取到最外面了,包括上面一位仁兄的方法也试了,还是这样

追答

首先,你那个函数有语法错误,其次,你可以弄个fail的callback看看有没有调回data。最后,在firebug或者chrome的console里弄个断点追踪下不就出来了。

第3个回答  2013-06-06
骚年 研究一下闭包哇

jquery中的$.post()中的回调函数中能设置外界参数的值吗?
你在页面有两个alert,,应该会出现两次才对。第一次应该是false,第二次应该由data来决定。因为你使用的是AJAX,默认是异步的,因此当代码执行到$.post()时,并不会等它结果,而是继续向下执行,到了第二个alert的位置,这时t应该还是最初你设定的var t = false;所以会显示false.还有,alert()会中...

jquery在$post()的回调函数中,无法设置元素show,每次都是一闪又变回隐 ...
.post("handler.ashx",参数,function (data, status) { var obj_json = eval("(" + data + ")");if (obj_json.stts == 'ok') { ("#warningdiv").text(obj_json.stts);} },"json");参数参数支持 对象{"id":5,"name":"张三"} 也支持 字符串 "id=5&name=张三",你那样...

java 、JQuery问题,$.ajax()、$.post()、$.get(),各在什么情况下使用...
callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some >...

jQuery $.get(url,data,callback,type) 返回值给全局变量赋值的问题
ls说的对,Ajax是异步JavaScript&XML浏览器解析页面时候不等你Ajax响应会来,就会继续向下执行,这时你的全局mm任然是1,如果你在回调函数function(data){}内部alert的话,就会是8了。一种是楼上说的方法 另一种就是把异步改为同步 async: false ...

jquery中的$.post()方法最后一个参数。
,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp参数。注意,JSONP是JSON格式的扩展。他要求一些服务器端的代码来检测并处理查询字符串参数。更多信息可以参阅 最初...

jQuery 里的$.post()是什么函数?
.post()是jquery一个简单的 POST 请求功能以取代复杂 $.ajax .第一个"php\/folders.php"url,{fun:"addDir", dirname:dirname, newDirname:newDirname, fetchDir:dirname}是data也就是你要传的参数,function(res)是回调函数。

jquery中ajax的回调函数包括哪几个
jquery中ajax的回调函数:beforeSend、error、dataFilter、success、complete。beforeSend 在发送请求之前调用,并且传入一个 XMLHttpRequest 作为参数。error 在请求出错时调用。传入 XMLHttpRequest 对象,描述错误类型的字符串以及一个异常对象(如果有的话)dataFilter 在请求成功之后调用。传入返回的数据以及 ...

jquery ajax的回调函数function()里面的参数可以使用哪些 又分别代表什 ...
也就是你向服务器端所要发送的数据,function(data\/msg)里面的参数,其实不论你写什么都可以的,仅仅是一个变量,它是你异步请求后,服务器端给你返回的数据,它可以使json,xml,html等等如果有时间的话建议你w3cschool学习哦,里面有很多内容都很详细的,希望能帮到你!

jquery ajax的回调函数function()里面的参数可以使用哪些 又分别代表什 ...
.ajax(url,data,function(msg))msg 是代表服务器传来的是字符串。$.ajax(url,data,function(data))data代表传来的是json 数据,要序列化之后才能拿到数据。$.ajax(url,data,function(data,textStatus))data 代表也是json 数据,textStatus 的值为success 代表连接成功,不是这个代表连接失败 ...

jquery如何接收php返回值
jquery的$.post的回调函数我用alert打印一下是打印php所有内容,我只要取php里面echo的内容,如果一个php里面有多个echo 我该如何选取其中一个echo 里面的内容,本人小白,求指导...匿名 | 浏览3427 次 |举报 我有更好的答案推荐于2016-04-09 11:15:27 最佳答案 如果在php里有echo的值的话,可以用AJAX来接收:...

相似回答