Javascript 为xmlhttprequest对象提供属性

Javascript 为xmlhttprequest对象提供属性,javascript,html,Javascript,Html,我有以下代码: <head> <script> function startChanging() { var elems = document.getElementsByTagName("img"); for(var i=0; i < elems.length; i++) { var xmlhttp; if (window.XMLHttpRequest) { // c

我有以下代码:

<head>
<script>

function startChanging() {
    var elems = document.getElementsByTagName("img");

    for(var i=0; i < elems.length; i++)
    {
        var xmlhttp;
        if (window.XMLHttpRequest)
        {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp["elem"] = elems[i];
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                this["elem"].src = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "http://myurl.com/somescript.php", true);
        xmlhttp.send();
    }

};

</script>
</head>

<body onload="startChanging()">
<img src="https://www.google.com/images/srpr/logo11w.png">
<br/>
<img src="https://www.google.com/images/srpr/logo11w.png">
<br/>
<img src="https://www.google.com/images/srpr/logo11w.png">
</body>

函数启动更改(){
var elems=document.getElementsByTagName(“img”);
对于(变量i=0;i

尽管我为每次迭代创建了一个新的
XMLHttpRequest
实例,并将当前元素添加到属性中,但当请求返回响应时,只会更改最后一个
img
元素

我正在寻找一个简单的解决方案来更改
img
元素的
src
,而无需在响应到来时再次遍历所有元素。我想要一个纯Javascript解决方案(阅读:no JQuery)

我确实做错了什么,我只是不明白是什么。任何帮助都将不胜感激

xmlhttp.send();
将数据放入发送方法:

xmlhttp.send(data);
资料来源:

如果
data
是一个JavaScript变量,则可以将任何内容放入其中。如果需要多部分消息,可以使用
var data=new-FormData()并使用
data.append('image',file)将数据放入其中用于通过ajax上传文件。
如果没有多部分,只需输入以下内容:

data = { images: document.getElementsByTagName("img") }
将数据放入发送方法:

xmlhttp.send(data);
资料来源:

如果
data
是一个JavaScript变量,则可以将任何内容放入其中。如果需要多部分消息,可以使用
var data=new-FormData()并使用
data.append('image',file)将数据放入其中用于通过ajax上传文件。
如果没有多部分,只需输入以下内容:

data = { images: document.getElementsByTagName("img") }
将数据放入发送方法:

xmlhttp.send(data);
资料来源:

如果
data
是一个JavaScript变量,则可以将任何内容放入其中。如果需要多部分消息,可以使用
var data=new-FormData()并使用
data.append('image',file)将数据放入其中用于通过ajax上传文件。
如果没有多部分,只需输入以下内容:

data = { images: document.getElementsByTagName("img") }
将数据放入发送方法:

xmlhttp.send(data);
资料来源:

如果
data
是一个JavaScript变量,则可以将任何内容放入其中。如果需要多部分消息,可以使用
var data=new-FormData()并使用
data.append('image',file)将数据放入其中用于通过ajax上传文件。
如果没有多部分,只需输入以下内容:

data = { images: document.getElementsByTagName("img") }

for
循环中,您正在覆盖
xmlhttp
变量,因此当您进入
onreadystatechage
函数并检查
xmlhttp.readyState
的值时,它将不会检查正确的对象

我建议使用此修复程序,它改变了两件事:

  • 它将每个ajax调用放入自己的IIFE中,从而使
    xmlhttp
    变量在每个ajax调用中保持独立
  • 它将
    elems[i]
    传递到闭包中,这样您就不必进行属性保存攻击
  • 代码:

    函数启动切换(){
    var elems=document.getElementsByTagName(“img”);
    对于(变量i=0;i
    for
    循环中,您正在覆盖
    xmlhttp
    变量,因此当您进入
    onreadystatechage
    函数并检查
    xmlhttp.readyState
    的值时,它将不会检查正确的对象

    我建议使用此修复程序,它改变了两件事:

  • 它将每个ajax调用放入自己的IIFE中,从而使
    xmlhttp
    变量在每个ajax调用中保持独立
  • 它将
    elems[i]
    传递到闭包中,这样您就不必进行属性保存攻击
  • 代码:

    函数启动切换(){
    var elems=document.getElementsByTagName(“img”);
    对于(变量i=0;i
    for
    循环中,您正在覆盖
    xmlhttp
    变量,因此当您进入
    onreadystatechage
    函数时