Javascript 触发事件和ajax

Javascript 触发事件和ajax,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我对ajax和jquery都是新手,所以请原谅这个初学者的问题。我对使用AJAX调用和返回JSON对象的过程感到困惑,并对程序的其余部分提供这些数据感到困惑 如果我有这样一个函数: function treeData(){ $.getJSON("/recipe/recipelist/", function(data) { // sorts array by title, alphabetically data.sort(function(a, b){ re

我对ajax和jquery都是新手,所以请原谅这个初学者的问题。我对使用AJAX调用和返回JSON对象的过程感到困惑,并对程序的其余部分提供这些数据感到困惑

如果我有这样一个函数:

function treeData(){
  $.getJSON("/recipe/recipelist/", function(data) {

    // sorts array by title, alphabetically 
    data.sort(function(a, b){
        return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
    }); 

    return data; 
  });
}
我得到一个错误,说obj是未定义的。基本上,我不明白这为什么不起作用。我想这和我的返回声明有关。我希望能够构建另一个“delete”函数,当调用该函数时,它会触发一个.getJSON请求并重新绘制我的数据库条目列表


提前谢谢

您必须向它发送一个回调,以便对返回的
treeData数据执行操作

//modified tree data
function treeData(callback){
    $.getJSON("/recipe/recipelist/", function(data) {
        data.sort(function(a, b){
            return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
        }); 
        callback(data); //supply the callback with the data
    });
}

var obj;

treeData(function(newdata){  //the supplied data
    obj = newdata            //assign to obj
});
//修改的树数据
函数treeData(回调){
$.getJSON(“/recipe/recipelist/”,函数(数据){
数据排序(函数(a,b){
返回b.titlea.title-1:0;
}); 
回调(数据);//为回调提供数据
});
}
var-obj;
treeData(函数(newdata){//提供的数据
obj=新数据//分配给obj
});

您必须向它发送一个回调,以便对
treeData的返回数据进行处理

//modified tree data
function treeData(callback){
    $.getJSON("/recipe/recipelist/", function(data) {
        data.sort(function(a, b){
            return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
        }); 
        callback(data); //supply the callback with the data
    });
}

var obj;

treeData(function(newdata){  //the supplied data
    obj = newdata            //assign to obj
});
//修改的树数据
函数treeData(回调){
$.getJSON(“/recipe/recipelist/”,函数(数据){
数据排序(函数(a,b){
返回b.titlea.title-1:0;
}); 
回调(数据);//为回调提供数据
});
}
var-obj;
treeData(函数(newdata){//提供的数据
obj=新数据//分配给obj
});

AJAX中的A代表异步,这意味着代码不等待响应到达,而是在响应到达时调用回调函数。如果您试图立即返回该值,它将不会被设置

在函数中也使用回调:

function treeData(callback){
  $.getJSON("/recipe/recipelist/", function(data) {

    // sorts array by title, alphabetically 
    data.sort(function(a, b){
        return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
    }); :


    callback(data); 
  });
}

AJAX中的A代表异步,这意味着代码不等待响应到达,而是在响应到达时调用回调函数。如果您试图立即返回该值,它将不会被设置

在函数中也使用回调:

function treeData(callback){
  $.getJSON("/recipe/recipelist/", function(data) {

    // sorts array by title, alphabetically 
    data.sort(function(a, b){
        return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
    }); :


    callback(data); 
  });
}

您不能从回调中
返回
。相反,您应该分配
数据
执行一个在
树数据
外部声明的变量,或者只执行回调内部的
数据
所需的操作。

您不能
从回调返回
。相反,您应该分配
数据
执行在
树数据
外部声明的变量,或者只执行回调内部的
数据
所需的操作。

您不能这样做。
return
语句从内部函数返回,而不是从
treeData
函数返回

function treeData() {

  $.getJSON("/recipe/recipelist/", function(data) {

    // sorts array by title, alphabetically 
    data.sort(function(a, b){
        return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
    }); 

    // this is in the inner function
    return data; 
  });

  // this is in the treeData function
  return "whatever";
}

你不能那样做。
return
语句从内部函数返回,而不是从
treeData
函数返回

function treeData() {

  $.getJSON("/recipe/recipelist/", function(data) {

    // sorts array by title, alphabetically 
    data.sort(function(a, b){
        return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
    }); 

    // this is in the inner function
    return data; 
  });

  // this is in the treeData function
  return "whatever";
}

默认情况下,AJAX请求是异步的,当函数返回时,AJAX请求尚未完成,数据不可用。您必须开始使用传递给
$.getJSON
的回调函数中的数据。这样,您的代码就可以访问数据。Joseph提供了一个例子。

默认情况下,AJAX请求是异步的,在函数返回时,AJAX请求尚未完成,数据不可用。您必须开始使用传递给
$.getJSON
的回调函数中的数据。这样,您的代码就可以访问数据。Joseph提供了一个例子。

$。getJSON是一个异步请求,这意味着代码会被执行,但不会等待代码完成。该代码无法工作,原因有二:

  • 您可能在getJSON完成执行之前就分配了treeData()的值

  • 在您的示例中,treeData()实际上不返回任何值,getJSON回调会返回

  • 这将有助于:

    var obj;
    
    function treeData(){
      $.getJSON("/recipe/recipelist/", function(data) {
    
        // sorts array by title, alphabetically 
        data.sort(function(a, b){
            return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
        }); 
    
        obj = data; 
      });
    };
    
    treeData();
    
    var-obj;
    函数treeData(){
    $.getJSON(“/recipe/recipelist/”,函数(数据){
    //按标题按字母顺序对数组排序
    数据排序(函数(a,b){
    返回b.titlea.title-1:0;
    }); 
    obj=数据;
    });
    };
    treeData();
    

    但是您不知道getJSON回调何时完成触发,因此您可能希望在回调本身中处理排序结果。

    $。getJSON是一个异步请求,这意味着代码将被执行,但不会等待它完成。该代码无法工作,原因有二:

  • 您可能在getJSON完成执行之前就分配了treeData()的值

  • 在您的示例中,treeData()实际上不返回任何值,getJSON回调会返回

  • 这将有助于:

    var obj;
    
    function treeData(){
      $.getJSON("/recipe/recipelist/", function(data) {
    
        // sorts array by title, alphabetically 
        data.sort(function(a, b){
            return b.title < a.title ? 1 : b.title > a.title ? -1 : 0;
        }); 
    
        obj = data; 
      });
    };
    
    treeData();
    
    var-obj;
    函数treeData(){
    $.getJSON(“/recipe/recipelist/”,函数(数据){
    //按标题按字母顺序对数组排序
    数据排序(函数(a,b){
    返回b.titlea.title-1:0;
    }); 
    obj=数据;
    });
    };
    treeData();
    

    但是您不知道getJSON回调何时完成触发,因此您可能需要在回调本身中处理排序结果。

    这完全有道理。谢谢你,约瑟夫,这完全有道理。谢谢你,约瑟夫。我甚至都不知道它的存在。谢谢您是否建议使用此方法而不是其他答案中提供的标准回调方法?在您的情况下,我认为这两种方法是等效的,但最好将关注点(获取数据和处理数据)分开。此外,延迟是非常强大的,回调有点“有限”。你可以看看这个来了解更多:)@bento你也可以检查这些链接,我刚刚尝试实现了这一点,出于某种原因,“数据”JSON被解释为字符串。当我使用$.getJSON时,这不是问题。有什么线索吗