我有这个解析JSON的函数。当我在.live函数中调用它时,我得到了未定义。
这是我创建的功能
function getAbc() {
var details;
var id = $(this).attr('data-id');
$.ajax({
url : '/index.php/data',
type : 'GET',
data : 'persons[]=' + id,
success : function(data, textStatus, xhr) {
details = JSON.parse(data);
},
});
return details;
}
我只是这样打电话,getAbc()。有什么方法可以访问函数中的详细信息变量吗?
答案 0 :(得分:2)
使用延续传递样式。 $.ajax
本质上是异步的。
function getAbc(callback) {
var details;
var id = $(this).attr('data-id');
$.ajax({
url : '/index.php/data',
type : 'GET',
data : 'persons[]=' + id,
success : function(data, textStatus, xhr) {
details = JSON.parse(data);
callback(details);
}
});
}
function getAbc(function (details) {
console.log(details);
});
答案 1 :(得分:1)
那是因为ajax
发生异步。这意味着getAbc
在调用 success
之前返回,因为请求通过网络传递。您需要在details
回调中使用success
,而不是在getAbc
方法返回后使用success
。或者,在details
中调用另一个使用详细信息的方法,并将{{1}}传递给该方法。
答案 2 :(得分:1)
这是由于AJAX的工作方式。
AJAX请求是异步的,这意味着它们不会立即返回。
当您进行AJAX调用时,会发出一个在未知时间完成的请求。
您可以使用回调函数来处理结果。
回调函数是一个执行 AFTER 从AJAX请求收到响应的函数。
您可以指定回调函数并将其传递给您的AJAX调用。