我正在尝试将结果成功传递给另一个函数,它只是返回一个未定义的值:
function tagCustomer(email, tags) {
var o = new Object();
o.tags = tags;
o.email = email;
o.current_tags = getCustomerTags(email);
o.new_tags = tags;
console.log(o);
return true;
}
function returnData( data ) {
return data;
}
function getCustomerTags(email) {
$.ajax({
url: "xxx.io/index.php",
type: "POST",
dataType: "json",
data: {email: email, "action": "getCustomerTags"},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function (data) {
returnData( data );
return data;
}
});
}
o.current_tags
应获得getCustomerTags
的结果。
答案 0 :(得分:1)
您应该将getCustomerTags
更改为类似的内容,因为它会发出异步请求:
function getCustomerTags(email) {
return $.ajax({
url: "xxx.io/index.php",
type: "POST",
dataType: "json",
data: {
email: email,
action: "getCustomerTags"
},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
});
};
然后像这样使用它:
getCustomerTags(email).done(function(data) {
console.log(data)
});
您正常的方法在这里不起作用,因为您在从服务器返回响应之前尝试返回。相反,您使用回调函数或承诺。
答案 1 :(得分:-1)
您依赖于ajax响应来从函数返回数据。但是默认情况下,ajax是异步的,不等待服务器响应。因此你的功能不会返回任何东西。
答案 2 :(得分:-2)
试试这个(这对UI不好,但是使用你当前的代码它会起作用,看看我答案底部的“更好的实践”):
function getCustomerTags(email) {
var result = null;
$.ajax({
url: "xxx.io/index.php",
type: "POST",
dataType: "json",
async: false,
data: {
email: email,
"action": "getCustomerTags"
},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function (data) {
result = data;
}
});
return result;
}
你的代码不起作用的原因是$ .ajax成功函数返回data
var,但getCustomerTags
没有返回任何内容。另外,请注意“async:false”,因为如果将其用作异步,则该函数将返回null,因为它将在ajax完成之前返回。
更好的实践
ajax函数有一个回调(成功),使用它!
设计你的代码不是作为等待ajax请求结果的方法,,而是作为一个ajax请求,在它完成后做一些事情!
示例强>
function tagCustomer(email, tags, data) {
var o = new Object();
o.tags = tags;
o.email = email;
o.current_tags = data
o.new_tags = tags;
console.log(o);
return true;
}
function getCustomerTags(email, tags) {
$.ajax({
url: "xxx.io/index.php",
type: "POST",
dataType: "json",
data: {email: email, "action": "getCustomerTags"},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function (data) {
tagCustomer(email, tags, data);
}
});
}
如果您有任何其他问题,请随时发表评论。