function simpleRequest() { var request = new XMLHttpRequest(); request.open("POST", "scrīpt.ashx"); request.send(null); }
function crossSubDomainRequest() { var proxy = document.getElementById("iframeProxy").contentWindow; proxy.sendRequest('POST', 'http://sub0.test.com/scrīpt.ashx'); }
* 我在出现这个想法之后也作了一些尝试,最后发现创建XMLHttpRequest对象,调用open方法和send方法都必须在iframe中的页面中执行才能够在IE和FireFox中成功发送AJAX请求。 * 在上面的例子中,我们向子域名请求的的路径是http://sub0.test.com/scrīpt.ashx。请注意,完整的子域名不可以省略,否则在FireFox下就会出现权限不够的错误,在调用open方法时就会抛出异常——似乎FireFox把它当作了父页面域名的资源了。 * Windows Live Contacts Gadget使用了一种叫做Channel的技术,用于解决跨任意域名传递数据的问题,我相当佩服微软技术人员的创造力。Channel技术是一种优秀的解决跨域名异步请求问题的解决方案,而且如果将它封装成了组件,那么使用起来也会相当优雅(似乎微软已经准备这么做了)。不过它和我们现在需要解决的问题并不相同,如果有机会的话,我也会详细的解释一下 Channel技术——但不是现在,因为我觉得我还没有完全理解这个技术本身。