在函数-JavaScript中访问对象属性

在函数-JavaScript中访问对象属性,javascript,Javascript,好的,我正在读取数据文件的内容,其中存储了显示宽度、显示高度、图像宽度、图像高度。我试图将这些值存储到变量中,以便在页面上的其他函数中使用。听说全局变量是个坏主意,我创建了这个对象: var slidedata = {dw:null,dh:null,rw:null,rh:null} 我在一个函数中进入这一部分: slidedata.dw = d[o].dispWidth; // How do I do this? 当我发出警报时(slidedata.dw)之后

好的,我正在读取数据文件的内容,其中存储了显示宽度、显示高度、图像宽度、图像高度。我试图将这些值存储到变量中,以便在页面上的其他函数中使用。听说全局变量是个坏主意,我创建了这个对象:

        var slidedata = {dw:null,dh:null,rw:null,rh:null}
我在一个函数中进入这一部分:

        slidedata.dw = d[o].dispWidth; // How do I do this?
当我发出
警报时(slidedata.dw)
之后,我得到null,这意味着我没有更改
slidedata.dw
的值。我检查了,当我
警报时(d[o].dispWidth),我得到一个OK值(307),所以这不是问题所在。问题是我不知道如何更改
slidedata.dw
的值。 我该怎么做

完整代码:

 <script type="text/javascript">
    var slidedata = {dw:null,dh:null,rw:null,rh:null}
    function ajaxjson(folder){

    var info = document.getElementById("info-wh");
var hr = new XMLHttpRequest();

hr.open("POST", "gallery_data.php");
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
    if(hr.readyState == 4 && hr.status == 200) {
        var d = JSON.parse(hr.responseText);
        for(var o in d){
            if(d[o].src == $('.image').attr('src')){


               slidedata.dw = d[o].dispWidth; 
    // HERE I'M TRYING TO SET slidedata.dw TO BE d[o].dispWidth
    // d[o].dispWidth RETURNS 307

               slidedata.dh = d[o].dispHeight;
               slidedata.rw = d[o].realWidth;
               slidedata.rh = d[o].realHeight;


              }
            }
         }
       }
     hr.send("folder="+folder);
    }
    </script> 

    </head>

    <body>

    <div id="info-wh"></div>
    <div id="info-cd"></div>
    <script>ajaxjson('slides');</script>
    <script>alert(slidedata.dw);</script> <!-- THIS RETURNS NULL -->
    <img class="image" alt="" border="0" src="slides/slide1.jpg" 
         style="width:400px; height:600px; left:200px; top:25px; position:relative;" />

var slidedata={dw:null,dh:null,rw:null,rh:null}
函数ajaxjson(文件夹){
var info=document.getElementById(“info wh”);
var hr=新的XMLHttpRequest();
hr.open(“POST”,“gallery_data.php”);
hr.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
var d=JSON.parse(hr.responseText);
用于(变量o在d中){
if(d[o].src==$('.image').attr('src')){
slidedata.dw=d[o].dispWidth;
//在这里,我试图将slidedata.dw设置为d[o].dispWidth
//d[o]。dispWidth返回307
slidedata.dh=d[o]。显示高度;
slidedata.rw=d[o].realWidth;
slidedata.rh=d[o]。真实高度;
}
}
}
}
hr.send(“文件夹=”+文件夹);
}
ajaxjson(“幻灯片”);
警报(slidedata.dw);

首先,您不需要事先定义对象的每个属性:

var sldiedata = {};
console.log(slidedata.dw); // undefined
将为您提供与相同的功能

var slidedata = {
   dw: null
}
console.log(slidedata.dw); // null

由于添加了不相关的信息,答案部分被删除。作为参考:

然后你写了

slidedata.dw = d[o].dispWidth)
而且全是打字错误。也许你是说

slidedata.dw = d[0].dispWidth();

好的,我最终通过使用jquery.post函数并将async选项设置为false找到了问题的解决方案。感谢所有对这个话题发表评论并帮助我学到新东西的人。。。我希望读者也会

我刚刚重命名了函数,JS如下所示:

<script>
  var slidedata = {dw:null, dh:null, rw:null, rh:null};

  function readData(){
     $.ajax({
     async: false, 
     url: 'gallery_data.php',
     success : function(data){   
              var id = $('.image').attr('src');
              id = id.replace('slides/slide','');
              id = id.replace('.jpg','');
              slidedata.dw = data['img' + id].dispWidth;
              slidedata.dh = data['img' + id].dispHeight;
              slidedata.rw = data['img' + id].realWidth;
              slidedata.rh = data['img' + id].realHeight;
          }

     });
  }
</script>

var-slidedata={dw:null,dh:null,rw:null,rh:null};
函数readData(){
$.ajax({
async:false,
url:'gallery_data.php',
成功:函数(数据){
变量id=$('.image').attr('src');
id=id.replace('幻灯片/幻灯片','');
id=id.replace('.jpg','');
slidedata.dw=data['img'+id].dispWidth;
slidedata.dh=数据['img'+id].dispHeight;
slidedata.rw=data['img'+id].realWidth;
slidedata.rh=数据['img'+id].realHeight;
}
});
}

d[o].dispWidth)
只是文章中的一个输入错误?应该可以,没有额外的结束括号。不清楚你的问题是什么<代码>slidedata.dw=3
将更改slidedata.dw的值。我想您必须显示更多的代码,以便我们了解问题所在。@RobG这是一个键入错误。谢谢你的关注…@jordandan这是一个打字错误。谢谢你的关注…谢谢你的回答。它没有完全的拼写错误,唯一的拼写错误是括号:)我已经上传了完整的代码,所以你可以看到。这里出了什么问题?@Knight1805好吧,你的问题是你把异步代码当作异步处理。让我解释一下:您正在检查“slidedata”的值,然后它才可用:AJAX请求将需要时间引导,而且它不是立即可用的。您需要研究和了解的是回调。我将尽快链接您的代码的更正版本。更正代码没有任何意义。我想通过阅读本文您会学到更多:另外,请注意,如果您已经在使用jQuery,请改用该方法。。。结果惨败。至少,我知道了回调的工作原理和一切。。。我想困扰我的是我对JS语法的了解。我似乎无法编写处理程序回调,我已经厌倦了。请您发布我的代码的更正版本,这样我就可以看到一个直接的例子,说明什么是有效的,为什么。