var tempArray = new Array(); function getcategoryList(){ $.ajax({ url:"/dhcDemo/workflow/category/list/full", type: "post", dataType: "json", async : false, success : function(data) { var tempArr2 = new Array() ; var listOB = new Object(); listOB.id = 01; listOB.name = "操作列表" listOB.parentId = null; var listOB0 = data[0]; listOB0.id = 0101; listOB0.parentId = 01 ; var listOB1 = data[21]; listOB1.id = 0102 ; listOB1.parentId = 0101 ; var listOB2 = data[26]; listOB2.id = 0103 ; listOB2.parentId = 0102 ; var listOB3 = data[27]; listOB3.id = 0104 ; listOB3.parentId = 0103 ; var listOB4 = data[3]; listOB4.id = 02 ; listOB4.parentId = 01 ; var listOB5 = data[14]; listOB5.id = 0201 ; listOB5.parentId = 02 ; var listOB6 = data[15]; listOB6.id = 0202 ; listOB6.parentId = 02 ; var listOB7 = data[16]; listOB7.id = 0203 ; listOB7.parentId = 02 ; var listOB8 = data[17]; listOB8.id = 0204 ; listOB8.parentId = 02 ; var listOB9 = data[31]; listOB9.id = 03 ; listOB9.parentId = 01 ; var listOB10 = data[32]; listOB10.id = 04 ; listOB10.parentId = 01 ; var listOB11 = data[33]; listOB11.id = 05 ; listOB11.parentId = 01 ; var listOB12 = data[34]; listOB12.id = 06 ; listOB12.parentId = 01 ; tempArr2.push(listOB); tempArr2.push(listOB0); tempArr2.push(listOB1); tempArr2.push(listOB2); tempArr2.push(listOB3); tempArr2.push(listOB4); tempArr2.push(listOB5); tempArr2.push(listOB6); tempArr2.push(listOB7); tempArr2.push(listOB8); tempArr2.push(listOB9); tempArr2.push(listOB10); tempArr2.push(listOB11); tempArr2.push(listOB12); setArr(tempArr2); } }); } function setArr(arr) { this.tempArray = arr ; } function getArr() { return this.tempArray ; }
为什么按一下回车之后会出现那么奇怪的一行,真的是日了狗了.
async就是Asynchronous(异步的英文单词前几个缩写)
ajax又是啥?Asynchronous JavaScript and Xml的缩写.武器大师叫Jax,不要混淆.
允许浏览器与服务器通信而无须刷新当前页面的技术叫ajax.
所以,问题来了,之前在没有添加这一选项的时候,默认是异步的,那是说明啥.
就是说虽然请求成功了,但是在数据还没有回来的时候,他已经开始处理success里面的内容(这时data是空的),然后做了一波骚操作,把方法里面的数组(局部变量)的值给了全局变量的数组,就好像带着多兰剑的ad点了一下六神装的龙龟(而且还是开W的)!
有个卵用?!此时心里肯定是MMP的,然后我就要考虑要不要Alt+F4了.
所以你在jsp文件里,去调用getArr()方法的时候,打印出来是undefinded,没有数据呗,这玩意折腾了我好久,改来改去的,害的我发布会都没好好看(顺便提一句坚果3挺失败的,期待一下515).
然后百度一波,发现是这个问题,那我就加上了这个属性,这个属性是说,我不许你异步了,你要按照我的规则来,所以,所有的执行就是按照我设计的顺序来.
从服务器拿到了数据之后,才开始按照顺序来,带着数据一步步的处理,然后给全局变量,这样就能取到数据了.
这里提一下success方法(敲黑板),success是说已经被那边的服务端接受响应了,不是说成功获取到响应之后的数据了,所以默认情况下,我这边知道那边响应了,我就不管了,至于数据有没有回来,不知道,我就直接上,但是加上同步,那就必须等我数据回来再做处理.
差不多了吧,后面看到什么或者有不对的再补充修正.