暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JSON APIs 和 Ajax:「11] 使用 XMLHttpRequest 方法发送数据

路条编程 2021-11-30
528



这一系列课程将介绍使用XMLHttpRequest 方法获取 JSON、使用 JavaScript 的 fetch 方法获取 JSON、访问来自 API 的 JSON 数据等相关内容。
使用 XMLHttpRequest 方法发送数据

在前面的示例中,我们在外部资源获取数据,我们也可以将数据发送到外部资源,只要该资源支持 AJAX 请求并且我们知道 URL。

JavaScript 的 XMLHttpRequest 方法也用于将数据发布到服务器,这是个例子:

const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 201){
const serverResponse = JSON.parse(xhr.response);
document.getElementsByClassName('message')[0].textContent = serverResponse.userName + serverResponse.suffix;
}
};
const body = JSON.stringify({ userName: userName, suffix: ' 可爱的小猫' });
xhr.send(body);

我们在之前见过其中几种方法。这里 open 方法将请求初始化为对外部资源的给定 URL 的 "POST",并使用 true 布尔值使其异步。setRequestHeader 方法设置 HTTP 请求标头的值,该标头包含有关发送人和请求的信息。它必须在 open 方法之后调用,但在 send 方法之前调用。这两个参数是标题的名称和要设置为该标题正文的值。接下来,onreadystatechange 事件侦听器处理请求状态的更改。readyState为 4 表示操作完成,status200 表示操作成功。文档的 HTML 可以更新。最后,该 send 方法发送带有 userName 值的请求,该值由用户在 input 字段中给出。

更新代码以创建并发送 "POST" 请求。然后在输入框中输入我们的姓名,我们的 AJAX 函数会用服务器返回的数据替换 "此处显示服务器返回信息"。在这种情况下,我们的名字附加 "可爱的小猫"。

完整代码如下所示:

<script>
document.addEventListener('DOMContentLoaded', function(){
document.getElementById('sendMessage').onclick = function(){


const userName = document.getElementById('name').value;
const url = 'https://jsonplaceholder.typicode.com/posts';


const xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 201){
const serverResponse = JSON.parse(xhr.response);
document.getElementsByClassName('message')[0].textContent = serverResponse.userName + serverResponse.suffix;
}
};
const body = JSON.stringify({ userName: userName, suffix: '可爱的小猫' });
xhr.send(body);


};
});
</script>


<style>
body {
text-align: center;
font-family: "Helvetica", sans-serif;
}
h1 {
font-size: 2em;
font-weight: bold;
}
.box {
border-radius: 5px;
background-color: #eee;
padding: 20px 5px;
}
button {
color: white;
background-color: #4791d0;
border-radius: 5px;
border: 1px solid #4791d0;
padding: 5px 10px 8px 10px;
}
button:hover {
background-color: #0F5897;
border: 1px solid #0F5897;
}
</style>


<h1>Cat Friends</h1>
<p class="message">
此处显示服务器返回信息
</p>
<p>
<label for="name">用户名:
<input type="text" id="name"/>
</label>
<button id="sendMessage">
发送消息
</button>
</p>


今天就讲到这里,如果有问题需要咨询,大家可以直接留言或扫下方二维码关注公众号。也可以添加 happyzjp 微信受邀加入学习社群,我们会尽力为你解答。练习网站已经正式上线,大家可以登陆网站 http://www.icoderoad.com 进行文章中示例的练习。
文章转载自路条编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论