【发布时间】:2020-04-22 20:23:45
【问题描述】:
我的页面中有输入元素,当我单击按钮时,我从 XMLHttpRequest 接收数据。 我尝试将一些数据传递给 html 元素,数据正确接收但我无法传递给元素。 这是我的代码
<input type="text" value="5" id="a" />
<script>
(function() {
let origOpen = XMLHttpRequest.prototype.open;
let a = 0;
XMLHttpRequest.prototype.open = function() {
console.log('request started!');
this.addEventListener('load', function() {
console.log('request completed!');
console.log(this.readyState); //will always be 4 (ajax is completed successfully)
console.log((JSON.parse(this.responseText)).input.a); // result = 20
a = parseInt((JSON.parse(this.responseText)).input.a);
$("#a").val(a); // not work
$("#a").setAttribute('value',a); // error: TypeError: $(...).setAttribute is not a function
document.getElementById("a").value = a; // error: TypeError: document.getElementById(...) is null
$("#a").value = a; // not work
});
origOpen.apply(this, arguments);
};
})();
</script>
【问题讨论】:
-
你测试过那个确切的代码吗?该错误表明在调用加载函数时文档中不存在输入......在本例中就是这样。
-
另外,您永远不会调用
send(),因此永远不会发送请求,因此永远不会触发加载事件。 -
正是我重构了请求以在适当的时候实际触发和设置数据。请考虑使用现代替代方案来处理异步请求。
-
@Quentin 我在这行
console.log((JSON.parse(this.responseText)).input.a);中正确接收到数据。当我测试功能以更改输入值时,它可以工作。但是当我从 xmlhttprequest 接收数据时我无法传递数据 -
@user4450367 — 这与我在 cmets 中提出的观点无关。