【QML xmlhttpreques】利用xmlhttprequest实现http网络请求

 


XMLHttpRequest(XHR)是现代Web开发中不可或缺的技术之一。它允许我们在不刷新整个页面的情况下,与服务器进行数据交换。readyState是XHR对象中的一个属性,它表示请求/响应过程的当前活动阶段。了解readyState对于高效使用XHR至关重要。

1、什么是XHR readyState?

readyState是XMLHttpRequest对象的一个只读属性,它代表了当前请求的状态。readyState的值是一个整数,它随着请求过程的不同阶段而变化。这些阶段如下:

0(UNSENT)                       :请求未初始化。尚未调用open()方法。
1(OPENED)                       :服务器连接已建立。已调用open()方法,但尚未调用send()方法。
2(HEADERS_RECEIVED):请求已接收。send()方法已被调用,且头部和状态已可获取。
3(LOADING)                     :请求处理中。响应体正在下载中,此时部分数据可能已可用。
4(DONE)                           :请求完成。整个请求过程已完成,且响应已就绪。

  2、如何使用XHR readyState?

 要使用readyState,首先需要创建一个XMLHttpRequest对象。然后,通过设置一个事件处理函数来监听readystatechange事件。每当readyState的值改变时,都会触发这个事件。

复制代码
 1 var xhr = new XMLHttpRequest();
 2 
 3 xhr.onreadystatechange = function() {
 4   if (xhr.readyState === 4 && xhr.status === 200) {
 5     // 请求成功,处理响应数据
 6     console.log(xhr.responseText);
 7   }
 8 };
 9 
10 xhr.open('GET', 'https://example.com/data', true);
11 xhr.send();
复制代码

在这个例子中,我们首先创建了一个XHR对象。然后,我们为readystatechange事件设置了一个处理函数。在这个函数中,我们检查readyState是否为4(表示请求已完成)以及HTTP状态码是否为200(表示请求成功)。如果是,我们就处理响应数据。

  • readyState的值是只读的,不能被修改。
  • readyState的变化是同步发生的,但readystatechange事件是异步触发的。
  • 在某些情况下,readyState可能会直接跳过某些值,例如从0直接变为4。

 3、HTTP状态码详解

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

 4、代码实例

复制代码
 1 // 功能是检查网络连接状态,通过向指定的 URL 发送一个 HTTP GET 请求,根据请求的响应状态判断网络是否正常。如果网络正常,可进行相应处理;
 2     // 如果网络异常,则弹出提示对话框,告知用户连接互联网,并在用户点击确认后执行一些界面操作
 3 
 4     function checkNetworkStatus() {                               //
 5         var request = new XMLHttpRequest();
 6         request.open("GET", "https://www.example.com", true);
 7         request.onreadystatechange = function() {
 8             if (request.readyState === XMLHttpRequest.DONE) {
 9                 if (request.status === 200) {
10                     // mainWindow.showMessageDialog()
11                 } else {
12                     mainWindow.showMessageDialog(qsTr("断网提示"),qsTr("请连接互联网!"),StandardButton.Ok,function(){
13                         // toolDrawer.visible = false
14                         // multiCamsView.destroy()
15                         toolDrawer.visible = false
16                         toolDrawerLoader.sourceComponent = null
17                     })
18                 }
19             }
20         };
21         request.send();
22     }
复制代码

 

posted @   taohuaxiaochunfeng  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示

目录导航