一个完整的xhr请求

以下是创建 XHR 对象的完整代码,告诉该对象要请求什么信息,设置成功或错误处理程序,然后实际地发送请求:

function handleSuccess () { 
  console.log( this.responseText ); 
// the HTML of https://unsplash.com/}
function handleError () { 
  console.log( 'An error occurred \uD83D\uDE1E' );
}
const asyncRequestObject = new XMLHttpRequest();
asyncRequestObject.open('GET', 'https://unsplash.com');
asyncRequestObject.onload = handleSuccess;
asyncRequestObject.onerror = handleError;
asyncRequestObject.send();

API 和 JSON

可以获得网站的 HTML,但是可能不太实用。它返回的数据格式难以解析。如果我们希望获得的数据是能轻松解析的数据结构,那就很棒了。如果你觉得 JSON 很不错,那么你猜对了!

我们创建一个从 Unsplash 的 API 中获取图片并从《纽约时报》上获取相关文章的应用,而不是请求 Unsplash 的基础 URL。

在向 API 发出请求并返回 JSON 时,我们只需将该 JSON 响应转换为 JavaScript 对象。为此,我们可以使用 JSON.parse();。我们修改下 onload 函数以处理 JSON 响应:

function handleSuccess () {
const data = JSON.parse( this.responseText ); // convert data from JSON to a JavaScript object
console.log( data );
}

asyncRequestObject.onload = handleSuccess;
### 如何在编程中发起HTTP网络请求 在网络编程领域,发起HTTP网络请求是一项常见的任务。以下是几种主流技术栈中的实现方式: #### JavaScript 中的 HTTP 请求 JavaScript 提供了多种方法来发起网络请求。最经典的方法之一是通过 `XMLHttpRequest` 对象完成。以下是一个完整的示例代码[^1]: ```javascript // 创建网络请求对象 const xhr = new XMLHttpRequest(); // 监听对象状态变化 xhr.addEventListener("readystatechange", function () { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.response); // 输出服务器返回的数据 } }); // 配置网络请求 xhr.open("GET", "http://example.com/api"); // 发送请求 xhr.send(); ``` 现代浏览器还支持更简洁的 Fetch API 来替代传统的 `XMLHttpRequest` 方法。 --- #### Qt 中的 HTTP 请求 在 C++ 和 Qt 编程环境中,可以利用 `QNetworkAccessManager` 类轻松发起 HTTP 请求。该类提供了高级接口用于简化 HTTP 操作[^2]。下面展示了一个简单的 GET 请求例子: ```cpp #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QUrl> QNetworkAccessManager manager; QNetworkRequest request(QUrl("http://example.com/api")); request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json")); manager.get(request); connect(&manager, &QNetworkAccessManager::finished, [](QNetworkReply *reply) { QByteArray data = reply->readAll(); // 获取响应数据 }); ``` --- #### Java 中的 HTTP POST 请求 Java 可以借助原生库或者第三方框架(如 OkHttp 或 Retrofit)发起网络请求。这里提供一个基于 `HttpURLConnection` 的简单 POST 请求案例[^3]: ```java URL url = new URL("http://example.com/post"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); String postData = "key=value"; OutputStream os = connection.getOutputStream(); os.write(postData.getBytes()); os.flush(); int responseCode = connection.getResponseCode(); // 响应码 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = br.readLine()) != null) { response.append(line); } System.out.println(response.toString()); // 打印响应体 ``` --- #### Kotlin 中的 RESTful 接口调用 对于 Android 开发者来说,Retrofit 是一种非常流行的工具,它可以方便地定义和执行 RESTful API 调用[^4]。以下是如何使用 Retrofit 定义并发起 GET 请求的例子: ```kotlin import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Path interface ApiService { @GET("users/{userId}") fun getUser(@Path("userId") userId: Int): Call<User> // 用户模型需自行定义 } val retrofit = Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val apiService = retrofit.create(ApiService::class.java) val call = apiService.getUser(1) call.enqueue(object : Callback<User> { override fun onResponse(call: Call<User>, response: Response<User>) { println(response.body().toString()) // 处理成功响应 } override fun onFailure(call: Call<User>, t: Throwable) { println(t.message) // 错误处理逻辑 } }) ``` --- ### 总结 不同的编程环境和技术栈有不同的方法来发起 HTTP 网络请求。无论是前端还是后端开发,掌握这些技能都是至关重要的基础能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值