在文档准备好中使用Jquery $ .get

时间:2010-01-07 19:30:45

标签: jquery

有人可以解释为什么警报语句在此上下文中使用时不返回任何内容:

$(document).ready(function(){

    $.get("/getsomedata.php", function(data){
        $("#mydiv").append(data)     
      });

     alert($("#mydiv").html()); //outputs nothing

});

当此语句返回您期望的内容时:

$(document).ready(function(){

     $("#mydiv").append('some info')     
      alert($("#mydiv").html()); //outputs 'someinfo'

});

7 个答案:

答案 0 :(得分:6)

.get没有阻塞,你的脚本的其余部分在文档加载时继续运行。要使其按预期工作,请将警报放在您提供的匿名函数中。这是一个回调函数,将在加载文档后触发。即:

$(document).ready(function(){

$.get("/getsomedata.php", function(data){
    $("#mydiv").append(data);
    alert($("#mydiv").html()); // This won't fire til somedata.php is loaded
  });

});

答案 1 :(得分:3)

数据尚未从异步调用中恢复。 function(data){$("#mydiv").append(data)}回调函数,并在数据返回时执行。什么都没有等待。当数据恢复时,该函数发生,但这几乎肯定会在“警报”调用发生后几毫秒内发生。

对于依赖于返回的数据的任何功能,请在回调函数本身中执行该功能。这样它会等待数据返回,但会尽快发生。

类似的东西:

$(document).ready(function(){

    $.get("/getsomedata.php", function(data){
        $("#mydiv").append(data);
        alert($("#mydiv").html()); // will show your data     
      });
});

答案 2 :(得分:3)

AJAX调用是异步的(默认情况下),这意味着在AJAX请求完成之前调用警报(或执行回调),并且当时正在尝试警告的html元素为空。

如果你想解决问题,只需将处理该DIV的HTML的代码放在你的$ .get()

中的回调函数中。

答案 3 :(得分:2)

$(document).ready(function(){

$.get("/getsomedata.php", function(data){
    $("#mydiv").append(data)     
    alert($("#mydiv").html()); //outputs nothing
});


});

像这样写。否则就像你的例子一样,在完成GET请求之前会提醒html。

答案 4 :(得分:1)

AJAX是异步的,这意味着追加是在警报之后发生的。传递给$.get()的函数是一个“回调”,因为 - 稍后在操作完成时调用。您收到的任何数据操作都应在回调中处理:

$(document).ready(function(){
  $.get("/getsomedata.php", function(data){
    // this is a "callback"
    $("#mydiv").append(data)     
    alert($("#mydiv").html());
  });
});

答案 5 :(得分:0)

你调用get方法,这是一个异步调用XMLHttpRequest的函数 -

答案 6 :(得分:0)

那是因为首先调用了警报,填充div的回调稍后完成,并且异步显示