如果互联网出现故障,所有未来的HTTP请求都会中断

时间:2016-03-23 05:35:39

标签: javascript web-services qt xmlhttprequest qml

我使用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();
}

除了这个特殊问题外,所有功能都可以正常工作:

  1. 我的应用程序正在运行,我正在调用某些服务,工作正常。

  2. 假设用户暂时没有使用该应用,并且在互联网之间关闭。现在,即使互联网回来了,我仍然会遇到这种情况:

    if(0 === http.status)
    {
        // Server down !?
    }
    
  3. 无论系统现在发生什么,所有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:

    此处报告为错误:https://bugreports.qt.io/browse/QTBUG-52197

0 个答案:

没有答案