Javascript 触发事件和ajax
我对ajax和jquery都是新手,所以请原谅这个初学者的问题。我对使用AJAX调用和返回JSON对象的过程感到困惑,并对程序的其余部分提供这些数据感到困惑 如果我有这样一个函数: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
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时,这不是问题。有什么线索吗