gpt4 book ai didi

javascript - xhr 在 onreadystatechange 中是否始终可以作为参数的属性使用?使用哪一个?

转载 作者:行者123 更新时间:2023-12-03 03:30:52 26 4
gpt4 key购买 nike

我的目标是使几个 XHR onreadystatechange 处理程序独立,这意味着我希望在不使用闭包的情况下将 XHR 对象放入其中(这样我就可以将它们堆叠起来)以任何顺序)。这是代码的主要部分:

var xmlhttp;
function receiveOriginal()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
...
}
}
...
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = receiveOriginal;
xmlhttp.open("GET", url, true);
xmlhttp.send();

现在,我想让它像

function receiveOriginal()
{
xmlhttpInside = ... // get it any way without using a closure
if (xmlhttpInside.readyState == 4 && xmlhttpInside.status == 200)
{
...
}
}
...
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = receiveOriginal;
xmlhttp.open("GET", url, true);
xmlhttp.send();

我发现这确实有效(至少在 Vivaldi 和 Chrome 中):

function receiveOriginal(ev)
{
xmlhttpInside = ev.currentTarget;
// or
xmlhttpInside = ev.srcElement;
// or
xmlhttpInside = ev.target;
// each of these return true: xmlhttp === ev.currentTarget , xmlhttp === ev.srcElement , xmlhttp === ev.target
if (xmlhttpInside.readyState == 4 && xmlhttpInside.status == 200)
{
...
}
}
...
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = receiveOriginal;
xmlhttp.open("GET", url, true);
xmlhttp.send();

但问题是,我正在一个又一个地查看教程,甚至是 W3C reference (这是最后一个,对吧?),它们都没有提及传递给 onreadystatechange 处理程序的参数。所以我不知道:

  • 支持范围有多大?
  • 我应该使用哪一个(ev.currentTargetev.srcElementev.target)(如果有)?它们有什么区别?

最佳答案

targetcurrentTargetsrcElement 都是 native Event 对象 ( documentation ) 的属性,onreadystatechange 接收它(因为它是一个事件处理程序)。有很多方法可以解决这个问题 - 所有这些都很好。我个人更喜欢使用 this 作为 onreadystatechange 回调:

function receiveOriginal() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText)
}
}

关于javascript - xhr 在 onreadystatechange 中是否始终可以作为参数的属性使用?使用哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com