【问题标题】:pass data response from xhr to html element将数据响应从 xhr 传递到 html 元素
【发布时间】: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 中提出的观点无关。

标签: javascript xmlhttprequest


【解决方案1】:

问题出在您的请求中。如果你真的想使用 XHR 的遗留物,它应该以这种方式重构:

const input = document.getElementById('a');

const myReq = new XMLHttpRequest();

myReq.onload = function() {
    const data = JSON.parse(this.responseText);
    input.value = data;
};

myReq.onerror = function(err) {
    console.log(err);
};

myReq.open('get', '[your url]', true);
myReq.setRequestHeader('Accept', ' application/json');
myReq.send();

我已经测试了这段代码,它适用于一个愚蠢的 api。

【讨论】:

  • “问题出在您的请求中”——不,不是。问题是 document.getElementById("a") 正在返回 null
  • 由于问题中的代码显示document.getElementById('a') 并且您的代码也显示document.getElementById('a') ...我不明白为什么它的行为会有所不同。正如我在评论中指出的那样,OP 的代码缺少一个 minimal reproducible example 来证明问题,因此我无法针对他们的情况测试您的更改,但您的更改没有让我印象深刻,因为它根本没有解决这个问题。
  • 我确实对此进行了测试,并且代码有效,所以这毫无意义。我已经处理了这个问题,我不知道他之前在做什么以及为什么它是空的。我所知道的是,使用他的确切 HTML 和这个确切的 JS,这是可行的..
  • 如果您不知道为什么 document.getElementById('a') 在 OP 的代码中返回 null(在问题中给出的示例中它不会)那么您无法修复它。您只是在移动其他代码位而没有实际效果。所提出的问题在目前的状态下是无法回答的,而您试图回答它只是一个红鲱鱼。
  • 好的,现在我明白你的意思了。无论如何,XHR 请求需要一些认真的重新审视,所以我无法抗拒! :D
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2018-01-04
相关资源
最近更新 更多