高分求救关于jquery“$.post()”的问题,为什么变量第一次返回data的值是undefined?急急急!!

<!DOCTYPEhtml><html><head><scriptsrc="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jq... <!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
$(document).ready(function(){
var jj;
$("button").click(function(){
$.post("/example/jquery/demo_test_post.asp",
{
name:"Donald Duck",
city:"Duckburg"
},
function(data,status){
jj=data; //为什么第一次返回的时候没有把data赋值给jj ???
});
alert(jj); //为什么jj第一次返回的值是undefined ???
});
});
</script>
</head>
<body>
<button>向页面发送 HTTP POST 请求,并获得返回的结果</button>
</body>
</html>

代码测试地址: http://www.w3school.com.cn/tiy/t.asp?f=jquery_ajax_post
展开
 我来答
jinyc007
2013-06-27 · TA获得超过934个赞
知道小有建树答主
回答量:398
采纳率:75%
帮助的人:476万
展开全部
异步加载的意思是,发送了请求之后就继续执行后面的代码,等服务器响应了之后就会调用回调函数。针对你的代码,我演示两次请求:

$(document).ready(function () {
var jj; // A
$("button").click(function () {
$.post("/example/jquery/demo_test_post.asp", {
name : "Donald Duck",
city : "Duckburg"
},
function (data, status) {
jj = data; // B
});
alert(jj); // C
});
});

第一次:
点击按钮后,发送请求,然后继续执行代码,就会执行到 C 这里,这时候,服务器还未响应,没有调用回调函数对 jj 进行赋值,所以 C 这里的 jj 还是和 A 处 jj 一样,是 undefined。接着,服务器响应了,调用回调函数,对 jj 进行赋值。至此,第一请求完成,jj 被赋值成服务器响应的那个值。

第二次:
点击按钮,发送请求,然后继续执行代码,此时,jj 是有值的,执行到 C 处时,会显示一个值,其实这个值是第一次响应的值。接着,服务器响应了,调用回调函数,对 jj 进行赋值。至此,第二次请求完成。

由于继续执行后续代码的时间肯定比获取服务器响应并调用回调函数进行赋值快,所以在第一次请求时,还没来得及获取响应,就alert(jj),自然是 undefined。
jonggers
2013-06-27 · TA获得超过846个赞
知道小有建树答主
回答量:497
采纳率:0%
帮助的人:546万
展开全部
function为回调函数,属于异步获取,数据载入成功后才执行函数内代码,
实际的执行的顺序为:
var jj ;
alert(jj);
jj=data;

所以你看到的是undefined
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
happyme100
2013-06-27 · TA获得超过764个赞
知道小有建树答主
回答量:423
采纳率:0%
帮助的人:386万
展开全部
function(data,status){
jj=data; //为什么第一次返回的时候没有把data赋值给jj ???
});里面的变量jj的存活作用域就是这个函数,alert(jj);在这个匿名函数外,那么jj是宁一个变量,由于
没有赋值,便为未定义。正确写发
function(data,status){
jj=data; //为什么第一次返回的时候没有把data赋值给jj
alert(jj);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lvming6816077
2013-06-27 · TA获得超过364个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:138万
展开全部
ajax有延迟,当alert的时候post请求还没有结束,jj还没有被赋值当然是undefined
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式