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

<!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
最新回答
燕如兮

2024-05-06 05:43:44

异步加载的意思是,发送了请求之后就继续执行后面的代码,等服务器响应了之后就会调用回调函数。针对你的代码,我演示两次请求:

$(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。
只想待在家

2024-05-06 03:16:06

function为回调函数,属于异步获取,数据载入成功后才执行函数内代码,
实际的执行的顺序为:
var jj ;
alert(jj);
jj=data;

所以你看到的是undefined
岛川奈

2024-05-06 06:35:09

function(data,status){
jj=data; //为什么第一次返回的时候没有把data赋值给jj ???
});里面的变量jj的存活作用域就是这个函数,alert(jj);在这个匿名函数外,那么jj是宁一个变量,由于
没有赋值,便为未定义。正确写发
function(data,status){
jj=data; //为什么第一次返回的时候没有把data赋值给jj
alert(jj);
}
林中教师

2024-05-06 05:42:35

ajax有延迟,当alert的时候post请求还没有结束,jj还没有被赋值当然是undefined