JavaScript函数返回undefined JSON对象(但它不是未定义!)
我试图返回从使用JSON jQuery插件(http://code.google.com/p/jquery-json/)功能的JSON对象,但在函数返回的对象之后,就变得不确定。JavaScript函数返回undefined JSON对象(但它不是未定义!)
$(document).ready(function() {
var $calendar = $('#calendar');
$calendar.weekCalendar({
...
data : function(start, end, callback) {
var datas = getEventData();
alert(datas); // Undefined???
}
});
如果我返回之前检查的对象,它被定义。
function getEventData() {
var dataString = "minDate="+ minDate/1000 + "&maxDate=" + maxDate/1000;
//alert(dataString);return false;
$.ajax({
type: "POST",
url: "busker_ops.php",
data: dataString,
dataType: "json",
success: function(data) {
if(data != null) {
var jsonArray = new Array();
var jsonObj = {};
for(var i = data.length - 1; i >= 0; --i) {
var o = data[i];
var set_id = o.set_id;
var start = o.startOrig;
var end = o.endOrig;
var title = o.title;
var deets = o.deets;
jsonObj =
{
"id":parseInt(set_id),
"start":$("#calendar").weekCalendar("formatDate", new Date(start), "c"),
"end":$("#calendar").weekCalendar("formatDate", new Date(end), "c"),
"title":title,
"body":deets
};
jsonArray[i] = jsonObj;
}
alert($.toJSON(jsonArray)); // Defined!
return ($.toJSON(jsonArray));
} else {
}
}
});
}
任何想法,我在这里失踪?
function getEventData() {
function local() {
console.log(42);
return 42;
}
local();
}
您错过了外部函数返回未定义的事实。这就是为什么你的答案没有定义。
你也在做异步编程错误。你想使用回调。大概有100个关于这个确切问题的重复问题。
你非常有帮助!谢谢。实现我的异步错误并使用回调! http://*.com/questions/2195161/how-to-return-an-array-from-jquery-ajax-success-function-properly – Corey
您的getEventData()函数不会返回任何内容。
您正在从异步调用的回调函数返回JSON对象。您对$ .ajax的调用不返回任何内容,它只是开始后台XMLHttpRequest,然后立即返回。当请求完成时,如果HTTP请求成功,它将调用success
函数。成功函数返回到$ .ajax的内部代码,而不是到您最初称为$ .ajax的函数。
杜!谢谢。现在解决这个问题。 – Corey
我解决了这个问题,因为AJAX毕竟是回调。一旦检索到数据,它将被分配给回调中的全局变量,并使用全局变量(数据)刷新日历。
$(document).ready(function() {
// Declare variables
var $calendar = $('#calendar');
datas = "";
set = 0;
// Retrieves event data
var events = {
getEvents : function(callback) {
var dataString = "minDate="+ minDate/1000 + "&maxDate=" + maxDate/1000;
$.ajax({
type: "POST",
url: "busker_ops.php",
data: dataString,
dataType: "json",
success: function(data) {
if(data != null) {
var jsonArray = new Array();
var jsonObj = {};
for(var i = data.length - 1; i >= 0; --i) {
var o = data[i];
var set_id = o.set_id;
var start = o.startOrig;
var end = o.endOrig;
var title = o.title;
var deets = o.deets;
jsonObj =
{
"id":parseInt(set_id),
"start":$("#calendar").weekCalendar("formatDate", new Date(start), "c"),
"end":$("#calendar").weekCalendar("formatDate", new Date(end), "c"),
"title":title,
"body":deets
};
jsonArray[i] = jsonObj;
}
//alert($.toJSON(jsonArray));
callback.call(this,jsonArray);
} else {
}
}
});
}
}
$calendar.weekCalendar({
data : function(start, end, callback) {
if(set == 1) {
callback(datas);
//alert(datas.events);
}
}
});
// Go get the event data
events.getEvents(function(evented) {
displayMessage("Retrieving the Lineup.");
datas = {
options : {},
events : evented
};
set = 1;
$calendar.weekCalendar("refresh");
});
});
哇,我来了很长的路......不敢相信我在与异步斗争。哈哈! – Corey