在函数-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语法的了解。我似乎无法编写处理程序回调,我已经厌倦了。请您发布我的代码的更正版本,这样我就可以看到一个直接的例子,说明什么是有效的,为什么。