我使用qml / Javascript调用一些HTTP GET / POST方法。一般来说,它们看起来如下:
function someWebServiceGETCall()
{
var http = new XMLHttpRequest()
var url = "http://someUrl/webServicePoint"
http.open("GET", url, true);
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function()
{
if( XMLHttpRequest.DONE === http.readyState )
{
if( http.status == 200 )
{
// All good, got response
}
else
{
if(0 === http.status)
{
// Server down !?
}
else if( 400 == http.status )
{
// Server returned some sort of error
}
else
{
// Some error, I have no clue why!
}
}
}
}
http.send();
}
除了这个特殊问题外,所有功能都可以正常工作:
我的应用程序正在运行,我正在调用某些服务,工作正常。
假设用户暂时没有使用该应用,并且在互联网之间关闭。现在,即使互联网回来了,我仍然会遇到这种情况:
if(0 === http.status)
{
// Server down !?
}
无论系统现在发生什么,所有GET / POST都会在这种情况下结束。我必须重新启动应用程序,然后一切都开始工作。
互联网可用性是否有某种初始握手没有刷新?我是否需要手动检查互联网可用性?
想法我可以做些什么来避免这种情况?
编辑:我已添加了要复制的独立代码。
运行应用程序,点击屏幕,响应出现并显示在屏幕上。
随着应用仍在运行,请关闭互联网。
开启互联网。
现在再次点击屏幕发送请求。它应该说服务器已关闭!'现在所有后续点击。
import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window
{
visible: true
width: 500
height: 500
function someWebServiceGETCall()
{
busy.running = true
var http = new XMLHttpRequest()
var url = "http://maps.googleapis.com/maps/api/js"
http.open("GET", url, true);
http.setRequestHeader("Content-type", "application/json");
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function()
{
if( XMLHttpRequest.DONE === http.readyState )
{
busy.running = false
if( http.status == 200 )
{
responseText.text = "All good, got response"
print ("All good, got response")
}
else
{
if(0 === http.status)
{
responseText.text = "Server down !?"
print ("Server down !?")
}
else if( 400 == http.status )
{
// Server returned some sort of error
}
else
{
// Some error, I have no clue why!
}
}
}
}
http.send();
}
MouseArea
{
anchors.fill: parent
onClicked: someWebServiceGETCall()
}
Text
{
text: qsTr("Click to Call the service")
anchors.centerIn: parent
}
Text
{
id: responseText
text: qsTr("")
anchors.bottom: parent.bottom
}
BusyIndicator
{
id: busy
anchors.centerIn: parent
running: false
}
}
编辑2: