jQuery的Ajax的例子中为什么要设置async:false?设置成异步,为什么没有反应?

琉璃星云 98个月前 提问 源自: jQuery|Ajax的使用
0

$(function(){
   $("#b01").click(function(){
     htmlobj=$.ajax({url:"/example/data/ajax.txt",async:false});
     $("#myDiv").html(htmlobj.responseText);
   });
})

不明白例子为什么用同步,所以,改成了异步(async:true)却不出现结果了。请问,如果改成同步,服务器端是否也需要响应的变化?即,服务器响应同步和异步的方式是不同的吗?

  • 0
    ciga 98个月前 回答

    和服务端没有关系。问题在于这两个语句的执行模式,在同步和异步两种情况下有区别:

    htmlobj=$.ajax({url:"/example/data/ajax.txt",async:false});
    $("#myDiv").html(htmlobj.responseText);

    同步的情况下,第一个语句会阻塞执行至从服务器取到结果。因此htmlobj.responseText在第二个语句中访问时是有效的。

    但是如果你改成异步,那么第一个语句会立即返回并执行第二个语句(不管是不是拿到服务器的响应结果),这时htmlobj.responseText还是无效的。

    因此对于异步方式,你不能依赖于$.ajax()的返回值,而是应当使用一个回调函数来接收(延迟到来的)结果:

    $.ajax({
             url:"/example/data/ajax.txt",
             success: function(data){
                 $("#myDiv").html(data);
             }
         });


    最佳答案