在$.getJSON()中,根据获取的数据创建了DOM节点,却无法访问,求助

huagushe 2015-08-16 10:49:48
加载DOM节点前和加载后,DOM节点的数量一致,无法使用$("#product option:eq(1)").val()进行访问。这是为什么呢?

【HTML 主要代码】

<form action="" method="get">
<select id="product">
<option value="0">全部产品</option>
</select>
</form>


【jquery主要代码】
//加载前获取节点数量
var $a = $("#product").children();
alert($a.length);

$.getJSON("/ysy/common/info.asp?q=product",function(JsonObj){
$.each(JsonObj.product,function(i,item){
//创建DOM节点
$("#product").append("<option value='"+this.product_id+"'>"+this.product_name+"</option>");
});
});

//加载后获取节点数量
var $a = $("#product").children();
alert($a.length);
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huagushe 2015-08-18
  • 打赏
  • 举报
回复
$.getJSON("/ysy/common/info.asp?q=product",function(JsonObj){ $.each(JsonObj.product,function(i,item){ console.log("这时才获取数据"); //创建DOM节点 $("#product").append("<option value='"+this.product_id+"'>"+this.product_name+"</option>"); var $a = $("#product").children(); alert($a.length); }); }); //code lline 1 //..... //code line N //开始获取getJSON的数据 是按上面写的这么获取的吗,无论js中的代码有多少行,全部执行完毕后,才开始获取getJSON的数据? 这其实就是【异步获取】的概念?
szcszcss 2015-08-18
  • 打赏
  • 举报
回复
当js执行到你要弹出他子节点数量的时候。那边数据还没有完成获取并创建节点的操作。
huagushe 2015-08-17
  • 打赏
  • 举报
回复
十分感谢!的确在getJSON的回调函数中,可以获得新加载的DOM节点。 再请教两个问题: 1 如您所说,getJSON之后的代码,会在获取数据之前执行。那么getJSON的异步访问数据的回调函数是在【哪个时刻】开始执行呢?是加载完getJSON之后的所有的代码? 2 如果我想访问新加载的DOM节点,只能是在getJSON的回调函数体内吗? 3 AJAX异步访问数据,这个异步指的是在什么时机开始访问呢? 谢谢!
天际的海浪 2015-08-17
  • 打赏
  • 举报
回复
引用 2 楼 huagushe 的回复:
十分感谢!的确在getJSON的回调函数中,可以获得新加载的DOM节点。 再请教两个问题: 1 如您所说,getJSON之后的代码,会在获取数据之前执行。那么getJSON的异步访问数据的回调函数是在【哪个时刻】开始执行呢?是加载完getJSON之后的所有的代码? 2 如果我想访问新加载的DOM节点,只能是在getJSON的回调函数体内吗? 3 AJAX异步访问数据,这个异步指的是在什么时机开始访问呢? 谢谢!
6 ajax从服务器获取数据是需要一定时间的。什么时候获取完数据,回调函数就什么时候执行。当然这肯定是执行完getJSON后面所有代码之后了。 这相当于一个不确定延时时间的 setTimeout();
  • 打赏
  • 举报
回复
引用 2 楼 huagushe 的回复:
十分感谢!的确在getJSON的回调函数中,可以获得新加载的DOM节点。 再请教两个问题: 1 如您所说,getJSON之后的代码,会在获取数据之前执行。那么getJSON的异步访问数据的回调函数是在【哪个时刻】开始执行呢?是加载完getJSON之后的所有的代码? 2 如果我想访问新加载的DOM节点,只能是在getJSON的回调函数体内吗? 3 AJAX异步访问数据,这个异步指的是在什么时机开始访问呢? 谢谢!
1:getJSON异步是你getJSON的时候执行的,异步执行万,再开始执行funcation里面的内容 2:也有其它办法,不过这里推荐你还是放在 getJSON的回调函数体内 3: 当代码执行到getJSON的时候,就会直接组开始异步访问数据,这个异步访问数据结束以后,就会进入到getJSON的回调函数体内,getJSON也分同步和异步,你可以看下 下面的链接,就懂了 http://www.cnblogs.com/wangkongming/archive/2012/11/19/2777725.html
天际的海浪 2015-08-16
  • 打赏
  • 举报
回复
ajax默认获取数据是异步的。 $.getJSON后面的代码会在回调函数之前执行 var $a = $("#product").children(); alert($a.length); $.getJSON("/ysy/common/info.asp?q=product",function(JsonObj){ $.each(JsonObj.product,function(i,item){ console.log("这时才获取数据"); //创建DOM节点 $("#product").append("<option value='"+this.product_id+"'>"+this.product_name+"</option>"); var $a = $("#product").children(); alert($a.length); }); }); console.log("这里在获取数据之前执行");

87,838

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧