Javascript jQuery中getJSON的作用域
在使用getJSON时,我在尝试管理作用域时遇到了一些问题。Javascript jQuery中getJSON的作用域,javascript,jquery,scope,getjson,Javascript,Jquery,Scope,Getjson,在使用getJSON时,我在尝试管理作用域时遇到了一些问题。 因此,在HTML页面上,我有一个无序列表,其中包含JSON文件中的列表项。列表是转盘的标记 HTML: JS: grabJSON:function(){ $.getJSON('file.json',函数(数据){ var项目=[]; $.each(data.foo,function(k,v){ 物品。推送(“”+v.bar+“”); } $('ul.carousel').append(items.join(''); //旋转木马 $
因此,在HTML页面上,我有一个无序列表,其中包含JSON文件中的列表项。列表是转盘的标记 HTML:
JS:
grabJSON:function(){
$.getJSON('file.json',函数(数据){
var项目=[];
$.each(data.foo,function(k,v){
物品。推送(“”+v.bar+“ ”);
}
$('ul.carousel').append(items.join('');
//旋转木马
$('ul.carousel')。carouselFunction({
//旋转木马选项在这里
});
});
}
目前,我必须将carousel函数放在getJSON函数中。如果我创建另一个函数来设置carousel,我将失去getJSON中的作用域
打破这一点的首选方法是什么,这样我就可以有一个从getJSON调用的setupCarousel:function()
?通常,如果我想从对象中的另一个函数调用函数,我可以选择this.setupCarousel()
,但是对于嵌套范围,我不确定如何处理这个问题
此外,在getJSON函数之外,我无法访问附加的任何元素。因此,我可以访问ul,但不能访问从getJSON添加时创建的任何列表项。您尝试过类似的操作吗
grabJSON : function() {
$.getJSON('file.json', function(data) {
var items = [];
$.each(data.foo, function(k, v) {
items.push('<li>' + v.bar + '</li>');
}
makeCarousel(items);
});
}
//pass items to make carosuel function and use it this should solve your problem.
makeCarosuel: function(items) {
$('ul.carousel').append(items.join(''));
// carousel action here
$('ul.carousel').carouselFunction({
// carousel options here
});
}
grabJSON:function(){
$.getJSON('file.json',函数(数据){
var项目=[];
$.each(data.foo,function(k,v){
物品。推送(“”+v.bar+“ ”);
}
制作转盘(项目);
});
}
//将项目传递给carosuel函数并使用它,这将解决您的问题。
makeCarosuel:功能(项目){
$('ul.carousel').append(items.join('');
//旋转木马
$('ul.carousel')。carouselFunction({
//旋转木马选项在这里
});
}
您尝试过类似的方法吗
grabJSON : function() {
$.getJSON('file.json', function(data) {
var items = [];
$.each(data.foo, function(k, v) {
items.push('<li>' + v.bar + '</li>');
}
makeCarousel(items);
});
}
//pass items to make carosuel function and use it this should solve your problem.
makeCarosuel: function(items) {
$('ul.carousel').append(items.join(''));
// carousel action here
$('ul.carousel').carouselFunction({
// carousel options here
});
}
grabJSON:function(){
$.getJSON('file.json',函数(数据){
var项目=[];
$.each(data.foo,function(k,v){
物品。推送(“”+v.bar+“ ”);
}
制作转盘(项目);
});
}
//将项目传递给carosuel函数并使用它,这将解决您的问题。
makeCarosuel:功能(项目){
$('ul.carousel').append(items.join('');
//旋转木马
$('ul.carousel')。carouselFunction({
//旋转木马选项在这里
});
}
调用是异步的。因此,如果执行此操作:
thing.grabJSON();
do_some_other_stuff();
do\u some\u other\u stuff
将在$.getJSON
调用完成之前执行。您必须将所有内容都放在$.getJSON
回调中,因为这段代码将在将来的某个时间执行;回调可以自由地将收到的任何数据传递给其他函数(如Kishnore的回答)但是在$.getJSON
之后执行的代码(在源代码中after是after的意思)不能依赖$.getJSON
调用来执行任何操作
你可以这样做:
function buildCarousel(items) {
$('ul.carousel').append(items.join(''));
$('ul.carousel').carouselFunction({
// carousel options here
});
}
// ...
grabJSON : function(cb) {
$.getJSON('file.json', function(data) {
var items = [];
$.each(data.foo, function(k, v) {
items.push('<li>' + v.bar + '</li>');
}
cb(items);
});
}
//...
thing.grabJSON(buildCarousel);
功能构建转盘(项目){
$('ul.carousel').append(items.join('');
$('ul.carousel')。carouselFunction({
//旋转木马选项在这里
});
}
// ...
grabJSON:函数(cb){
$.getJSON('file.json',函数(数据){
var项目=[];
$.each(data.foo,function(k,v){
物品。推送(“”+v.bar+“ ”);
}
cb(项目);
});
}
//...
grabJSON(buildCarousel);
如果您想将$.getJSON
与需要使用该JSON执行的操作分开。在这种特殊情况下,像上面那样将其分开比实际工作更为繁忙,但是这种模式(回调中的回调,回调一直向下)在处理AJAX时非常常见。调用是异步的。因此,如果您这样做:
thing.grabJSON();
do_some_other_stuff();
do\u some\u other\u stuff
将在$.getJSON
调用完成之前执行。您必须将所有内容都放在$.getJSON
回调中,因为这段代码将在将来的某个时间执行;回调可以自由地将收到的任何数据传递给其他函数(如Kishnore的回答)但是在$.getJSON
之后执行的代码(在源代码中after是after的意思)不能依赖$.getJSON
调用来执行任何操作
你可以这样做:
function buildCarousel(items) {
$('ul.carousel').append(items.join(''));
$('ul.carousel').carouselFunction({
// carousel options here
});
}
// ...
grabJSON : function(cb) {
$.getJSON('file.json', function(data) {
var items = [];
$.each(data.foo, function(k, v) {
items.push('<li>' + v.bar + '</li>');
}
cb(items);
});
}
//...
thing.grabJSON(buildCarousel);
功能构建转盘(项目){
$('ul.carousel').append(items.join('');
$('ul.carousel')。carouselFunction({
//旋转木马选项在这里
});
}
// ...
grabJSON:函数(cb){
$.getJSON('file.json',函数(数据){
var项目=[];
$.each(data.foo,function(k,v){
物品。推送(“”+v.bar+“ ”);
}
cb(项目);
});
}
//...
grabJSON(buildCarousel);
如果您想将
$.getJSON
与需要使用该JSON执行的操作分开。在这种特殊情况下,像上面那样将其分开比实际工作更为繁忙,但是这种模式(回调中的回调,回调一直向下)在处理AJAX时非常常见。感谢您解释正在进行的过程。仍然在尝试处理异步回调行为,这肯定会有所帮助。将尝试这样解决它。是否有方法调用对象函数(buildCarousel:function(){})从grabJSON,还是它必须是它之外的函数?@xtine:things.grabJSON(函数(项目){things.buildCarousel(项目)})
,另一种常见模式。还有一种方法可以将一个函数绑定到一个特定的这个
,但你还不能指望它在任何地方都可用。这些东西有名称或引用吗。grabJSON模式?@xtine:匿名函数是一个闭包,但我不知道它的名称