有人可以解释为什么警报语句在此上下文中使用时不返回任何内容:
$(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'
});
答案 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的回调稍后完成,并且异步显示