如何使用原生Android 2.1浏览器中的javaScript检查与服务器的连接?
我正在构建一个需要在线或离线时无缝工作的Web应用程序。 为此,需要能够检查我与服务器的连接 。
支持的主要设备是iphone3 + 4,ipad,带Chrome的上网本和Android 2.1+。
navigator.onLine
并不是我想要的。 这是不可靠的,只检查您是否有连接,而不是连接到特定服务器。
我尝试使用jQuery.getJSON
连接到我的服务器上的ping web服务。 这在上网本的chrome中运行良好,但原生android浏览器返回null。 Ipod touch根本不做任何事情。
我可以用这个帮助..
我不完全了解你的情况,但听起来你应该使用……
$.ajax({ url: "test.html", cache: false, async : false, error: function(XMLHttpRequest, textStatus, errorThrown) { // some error code. }, success: function(html){ // do something. } });
http://api.jquery.com/jQuery.ajax/
async:false是使用test.html或任何其他简单文件“阻止”请求(基本上我们只是尝试连接。)您可以使用超时来设置一些短时间段。
然后看看你是否得到错误或成功 ……
错误(XMLHttpRequest,textStatus,errorThrown)
请求失败时要调用的函数。 该函数传递三个参数:XMLHttpRequest对象,描述发生的错误类型的字符串和可选的exception对象(如果发生)。 第二个参数的可能值(除了null)是“timeout”,“error”,“notmodified”和“parsererror”。 这是一个Ajax事件。不会为JSONP请求调用此处理程序,因为它们不使用XMLHttpRequest。
如果出现错误,请触发一些function来处理,如果你收到文件,你就可以了。
它毕竟与“同源政策”有关(见评论)。
这是通过使用JSONP解决的 。
奇怪的是,看起来我正在处理相同的域名,但是这里的代码是…
客户端:
jQuery.getJSON("url?callback=?", function(data) { //Do something });
服务器端:
@RequestMapping(value="url", method=RequestMethod.GET) public void ping(HttpServletRequest request, HttpServletResponse response) throws IOException { String output = request.getParameter("callback") + "({0:1});"; response.setContentType("text/javascript"); response.getWriter().write(output); }
我在Web应用程序中使用$.getJSON
遇到了类似的问题。 它适用于除Android以外的许多浏览器。 事实上,我的应用程序应该脱机工作,然后我使用一个清单,其中JSON文件被声明为CACHE。 对于初始加载,它运行良好但是对于下一页加载应用程序在加载JSON文件时被阻止。
我怀疑离线缓存被认为是初始服务器的另一个来源,并且进程被阻止。
希望能帮助到你