今天 为了模拟做一个极其简单可配置页面 打算从xml里面读出组件内容 然后 用jquery生成相应的模块。对于文件的读取jquery提供了相当方便的方法 ajax。基本的语法就不介绍了 极其简单 举一个基本的例子 $.ajax({
type: 'GET',
url: 'test.xml',
dataType: 'xml'
});
这样就能获取到名字为test的xml内容 接着做相应的解析就可以了
但是 在ajax方法中有个小细节 是我平时没有注意到的 不知道大家注意了没有。就是在ajax中的同步问题,也就是这个问题困扰了我几个小时。
情况是这样 在我的xml文件中有这些内容
<function>
<f>1</f>
<f>2</f>
</function>
在我的jquery代码中是这样的
$(document).ready(function(){
var i=0;
var arr=new Array();
$.ajax({url:'test.xml',dataType:'xml',success:function(xml){
arr=$(xml).find('f');
}});
alert(arr.length)
})
结果打印出来的是0 也就是在arr中的赋值语言看起来是无效的 正常情况应该是2
经过我的研究 也不知道对不对 有问题可以提出
在jquery中是异步执行机制 也就可以理解为 在上面那段代码中 ajax方法和alert方法是同时执行的也就是说有可能在ajax方法还没执行完的时候 就执行了alert方法 所以打印出的是0
解决办法就是修改为同步执行 就是先把ajax方法执行完了才执行ajax以下的代码 修改也很简单就是在ajax方法参数中添加async:false
也就是把jquery代码改为 $(document).ready(function(){
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。