javascript - javascript url调用执行两次
问题描述
我试图在 javascript 警报框中显示此 json 数据,但它显示了两次(相同的内容)。它正在工作,但我不知道为什么它显示两个警报。(javascript 不是我的首选语言)。
这是来自 URL 的响应,称为:
{
"type": "error",
"response": {
"message": "Could not start app"
}
}
这是我正在使用的代码:
<script type="text/javascript">
function call() {
const Http = new XMLHttpRequest();
const url='https://url_to_get_the_response';
Http.open("GET", url);
Http.send();
Http.onreadystatechange = (e) => {
if (Http.responseText) {
alert(Http.responseText);
}
}
}
</script>
我收到两个警报,都包含相同的内容(.json 结果)。我只想要其中之一。
我尝试在该部分中添加return;
and 。在语句中添加没有做任何事情并添加停止它的工作。break call;
if (Http.responseText)
return;
if
break call;
对此有何建议?谢谢。
解决方案
你的做法是正确的。onreadystatechange
事件被触发多次,因为readyState
属性从 API 调用的开始到结束发生变化。
readyState
在为对象中的适当和status
值添加 if 条件时XMLHttpRequest
。解决了这个问题。
您可以在此处阅读有关这些属性的更多信息 readyState , status
function call() {
const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/todos/1';
Http.open("GET", url);
Http.send();
Http.onreadystatechange = (e) => {
if (Http.readyState == 4 && Http.status == 200 && Http.responseText) {
alert(Http.responseText);
}
}
}
<button onclick='call()'>Call</button>
推荐阅读
- python-3.x - Eyed3 将 ID3 YEAR 标签写入 Mp3
- flutter - 如何使用 ChangeNotifier?
- react-native - 如何在 React Native 中使用 SSML 标签实现 Text to Speech?
- python - 查找 Max() Datetime Pandas Python
- linux-kernel - 为什么 IOCTL 命令号在整个系统中应该是唯一的?
- javascript - 打印内容来自服务器的 HTML 文档
- python - 枕头图像生成问题 - 合并多个图像
- java - Selenium Java-下拉选择,其中样式-显示为无
- javascript - 将字符串参数传递给 onclick() 函数并以模式显示
- reactjs - 在 React 的状态字典中设置字典