我有一个情况,我的网站需要通过AJAX快速从服务器检索数据。
我的网站运行在80端口上,提供普通的网页服务。我通常在8001端口运行我的AJAX服务器(我使用JSONP,这个方法很好用)。这适用于大多数用户。然而,一些用户由于本地防火墙的限制而被阻止访问高端口。
为了让那些无法在8001端口上得到响应的用户使用我的网站,我希望能够在用户无法在8001端口上获得响应时,自动回退到80端口。
我不总是使用80端口的原因是,有时人们会使用“智能”杀毒软件网关或其他应用层防火墙来拦截80端口的出站连接。这会增加几百毫秒的往返时间。我的AJAX服务需要尽量减少往返响应时间。
我使用jQuery使XMLHttpRequest的工作变得简单。我正在使用JSONP变体,这个部分可以工作——从不同的IP地址或端口拉取AJAX请求并不是问题本身。
我的想法是,在页面首次加载时,触发2个getJSON调用。一个是8001端口,另一个是80端口。两个调用都使用相同的响应处理程序。
第一个调用响应处理程序设置我的“portToUse”变量,然后继续正常功能。
如果8001端口没有被阻止,这个方法可以工作。如果8001端口被阻止,这个方法也可以工作。然而,在我的来自80端口的响应返回之前,会有大约5秒的延迟。这不是由服务器端引起的。我想消除这个延迟。
我的理论是,即使getJSON是异步的,浏览器一次只会触发一个XMLHttpRequest。它会在第一个请求返回或超时之前等待,然后再发送下一个请求。
我不确定我是否正确。如果是这样,那么有没有办法绕过这个功能,同时触发两个XMLHttpRequest?如果我错了,你有什么建议可以解决接收我的第二个响应(来自我的服务器上80端口)的延迟问题吗?任何其他建议都欢迎。
编辑: 这种行为只发生在Firefox 3和Opera 9.63中。IE7和Chrome没有出现这个延迟。
我的网站运行在80端口上,提供普通的网页服务。我通常在8001端口运行我的AJAX服务器(我使用JSONP,这个方法很好用)。这适用于大多数用户。然而,一些用户由于本地防火墙的限制而被阻止访问高端口。
为了让那些无法在8001端口上得到响应的用户使用我的网站,我希望能够在用户无法在8001端口上获得响应时,自动回退到80端口。
我不总是使用80端口的原因是,有时人们会使用“智能”杀毒软件网关或其他应用层防火墙来拦截80端口的出站连接。这会增加几百毫秒的往返时间。我的AJAX服务需要尽量减少往返响应时间。
我使用jQuery使XMLHttpRequest的工作变得简单。我正在使用JSONP变体,这个部分可以工作——从不同的IP地址或端口拉取AJAX请求并不是问题本身。
我的想法是,在页面首次加载时,触发2个getJSON调用。一个是8001端口,另一个是80端口。两个调用都使用相同的响应处理程序。
第一个调用响应处理程序设置我的“portToUse”变量,然后继续正常功能。
如果8001端口没有被阻止,这个方法可以工作。如果8001端口被阻止,这个方法也可以工作。然而,在我的来自80端口的响应返回之前,会有大约5秒的延迟。这不是由服务器端引起的。我想消除这个延迟。
我的理论是,即使getJSON是异步的,浏览器一次只会触发一个XMLHttpRequest。它会在第一个请求返回或超时之前等待,然后再发送下一个请求。
我不确定我是否正确。如果是这样,那么有没有办法绕过这个功能,同时触发两个XMLHttpRequest?如果我错了,你有什么建议可以解决接收我的第二个响应(来自我的服务器上80端口)的延迟问题吗?任何其他建议都欢迎。
编辑: 这种行为只发生在Firefox 3和Opera 9.63中。IE7和Chrome没有出现这个延迟。