2011年4月 文章归类

[转]利用跨域资源共享(CORS)实现ajax跨域调用

前几天看了一篇E文说部署CORS文章,CORS是一中跨域的方式,于是上网找了下Nicholas C. Zakas 的文章《Cross-domain Ajax with Cross-Origin Resource Sharing》,并且找到了中文的翻译,感觉不错,转来分享之。

几年前,网站开发者都因为ajax的同源策略而撞了南墙。当我们惊叹于XMLHttpRequest对象跨浏览器支持所带来的巨大进步时,我们很快发现没有一个方法可以使我们用JavaScript实现请求跨域访问,对此我们哀叹不已。每个人在他们自己的网站上建立代理(which was the onset of a new host of open redirect problems)来摆脱这种限制。虽然开发者利用服务器代理和其它技巧避开了这种限制,而在社区的抗议者允许ajax在本地跨域调用。许多人还没意识到当前几乎所有的浏览器(Internet Explorer 8+, Firefox 3.5+, Safari 4+和 Chrome)都可通过名为Cross-Origin Resource Sharing的协议支持ajax跨域调用。

跨域资源共享(CORS)

Cross-Origin Resource Sharing (CORS)是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。

对一个简单的请求,没有自定义头部,要么使用GET,要么使用POST,它的主体是text/plain,请求用一个名叫Orgin的额外的头部发送。Origin头部包含请求页面的头部(协议,域名,端口),这样服务器可以很容易的决定它是否应该提供响应。

Origin: http://www.nczonline.net

如果服务器确定请求被通过,它将发送一个Access-Control-Allow-Origin头部响应发送请求的同一个源,如果是一个公共资源,则返回“*”。如:

Access-Control-Allow-Origin: http://www.nczonline.net

继续阅读全文……

使用javascript将XML解析为JSON

今天看了David Walsh一篇把XML格式转换为JSON格式的文章,感觉不错,简单的转载了过来。
下面是神奇的XML转JSON的javascript代码:

	// Changes XML to JSON
function xmlToJson(xml) {
 
	// Create the return object
	var obj = {};
 
	if (xml.nodeType == 1) { // element
		// do attributes
		if (xml.attributes.length > 0) {
		obj["@attributes"] = {};
			for (var j = 0; j < xml.attributes.length; j++) {
				var attribute = xml.attributes.item(j);
				obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
			}
		}
	} else if (xml.nodeType == 3) { // text
		obj = xml.nodeValue;
	}
 
	// do children
	if (xml.hasChildNodes()) {
		for(var i = 0; i < xml.childNodes.length; i++) {
			var item = xml.childNodes.item(i);
			var nodeName = item.nodeName;
			if (typeof(obj[nodeName]) == "undefined") {
				obj[nodeName] = xmlToJson(item);
			} else {
				if (typeof(obj[nodeName].length) == "undefined") {
					var old = obj[nodeName];
					obj[nodeName] = [];
					obj[nodeName].push(old);
				}
				obj[nodeName].push(xmlToJson(item));
			}
		}
	}
	return obj;
};

继续阅读全文……

一道js正则笔试题

写在前面

终于找到工作了,现在在新浪微博工作,谢谢这段时间来帮我找工作的朋友。北京的生活的确压力很大,最起码心累,自己慢慢适应就好了。

不得不提的是拆那ZF的办事效率,我回家转户口,青岛老家来回跑了三四天,竟然还是没有给我搞定,最后说青岛户口已经起出来了,老家还要等十五天之后才可以看到结果,然后才能给我落户口!难道ZF的技术就那么差劲啊!数据库还是不统一的,还是故意要老百姓多跑几次,以调动内需?哎……

一道javascript正则笔试题目

在笔试的时候碰到了一道正则的题目,自己不会,后来查了很多资料也没找到,经过在Qwrap的QQ群里提问终于明白了是什么回事,特地记录一下。原题大致如下:

 
var a = new RegExp("123","g");
var b = "abc#123";
 
console.log(a.test(b));//true
console.log(a.test(b));//false
console.log(a.test(b));//true
console.log(a.test(b));//false

问为什么会输出true,false,true,false?
继续阅读全文……

返回顶部