AJAX

关于Javascript闭包closure的应用

最近在研究百度地图API的应用,试验了iOS SDK后又开始试验Web端的JS版应用,做到在地图上通过Ajax异步调用方式从后端取得数据后,添加标注并给标注添加对应的点击时间alert出此位置的信息时遇到了一个Javascript问题,最开始的code是这样写的:

		$.ajax({
			type : "get",
			url : urlStr,
			async : true,
			dataType : "json",
			error : function() {
				alert('No valid location record!');
			},
			success : function(json) {
				for(var i=0;i<json.length;i++)
				{
					var point = new BMap.Point(json[i].longtitude, json[i].latitude); 
					var marker = new BMap.Marker(point);        // 创建标注  
                                        // 添加点击事件侦听
					mark.addEventListener("click", function()
			                {
				            alert('记录时间: '+json[i].logTime+' 定位时间: '+json[i].gpsTime);
				            return;
			                });
					map.addOverlay(marker);                     // 将标注添加到地图中 
				}
		        var point = new BMap.Point(json[0].longtitude, json[0].latitude);  
        		map.centerAndZoom(point, 15);
			}
			});

这样运行时,点击任意一个标注后就会收到浏览器的js脚本错误,提示json[i].logTime还有后面同样的gpsTime部分有问题,检查了一下,发现Ajax请求成功后的函数内循环遍历数据时的i是局部变量,而每一个mark的click侦听函数内的i都为对同一个变量的引用,也就是说循环遍历后每次点击触发执行这段响应代码时的i都是同一个数,而不是认为的对应每一个mark时的i,也自然就取不到所期望的数据了!
Continue reading…

Eclipse+PDT+Apatana Studio 3的jQuery智能感知设置

以前总用PhpED做一些Web方面的东西,逐渐发现其实IDE还是少而精比较好,毕竟总在各种IDE或者是编辑器直接来回切换是一件很烦人的事,各种界面布局,快捷键之类的差异等会无意义的加大我本来就不怎么高的脑容量的存储鸭梨(比如Debug单步操作Borland的F8流和M$的F10流*_*)。于是开始迁移Web开发功能到常用Eclipse上,总体来说环境设置还算顺利,这次记录下jQuery只能感知相关的问题:

作业环境:

Eclipse Indigo Version: 3.7.1
PDT: 3.0.0
Apatana Studio 3: 3.0.8

jQuery: 1.7.1

Apatana和PDT的安装用Eclipse的Update Site还是比较省心的,PDT直接在Indigo的功能列表里找到,Apatana Studio 3的是:aptana – http://download.aptana.com/studio3/plugin/install,PS:这里好像看到有人提说要先装Apatana再装PDT,不过我觉得顺序应该不会影响功能。

Apatana 2的开启jQuery支持方式和3有所不同,3.0.5以后和以前也略有不同,2是用手动添加vsdoc等文件的方式,不太方便,3.0.5以后基本可以说是完整整合了这部分功能,还是比较方便的,具体操作:
Continue reading…