JavaScript / jQuery中的范围
我显然写了太多的CoffeeScript,因为我现在意识到我对纯JS的范围基本没有了解。
玩了一段时间后,我无法弄清楚以下问题 –
$(document).ready(function() { var myUrl = "http://notimportant.com/" var photos = getPhotos(myUrl); console.log(photos); //undefined }); function getPhotos(url) { var a; $.get(url, function(data) { a = data["photoset"]["photo"]; console.log(a); //my object }); return a; }
如果我在’var a = data [“photoset”] [“photo”]下面的行上放置一个console.log(a)语句;’ 它表明它正确地提出了我正在寻找的GET请求。 但我发现无法将该对象传递回我的主要代码块,我想在其中操作它。
提前致谢。
photos
未定义的原因不是因为范围。 因为$.get
是异步执行的。 $.get()
返回jqXHR对象而不是HTTP响应。
应该将onSuccess
回调传递给getPhotos()
以使其正常工作。 或者when().then()
构造可以使用。
$(document).ready(function() { var myUrl = "http://example.com/"; getPhotos(myUrl, renderCatPhotos); }); function getPhotos(url, onSuccess) { $.get(url, onSuccess); } function renderCatPhotos(data) { var a = data.photoset.photo; console.log(a); // a is always available }
注意:你可能甚至不需要getPhotos
function。 你可以简单地$.get(url, onSuccess);
在$(document).ready()
。
它不是范围问题,它是在$ .get定义之前返回未定义变量的问题。 考虑将照片设为全局照片,然后将其设置在$ .get成功函数中,而不是将其设置为“a”。 在成功function中,您可以向其他function发出调用,以控制显示/处理照片。