如何使用原生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文件时被阻止。

我怀疑离线缓存被认为是初始服务器的另一个来源,并且进程被阻止。

希望能帮助到你