Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery中getJSON的作用域_Javascript_Jquery_Scope_Getjson - Fatal编程技术网

Javascript jQuery中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(''); //旋转木马 $

在使用getJSON时,我在尝试管理作用域时遇到了一些问题。
因此,在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:匿名函数是一个闭包,但我不知道它的名称