var str ='';
function myFormatter(cellvalue, options, rowObject) {
if(rowObject.name== 'test'){
$.getJSON(loadUrl, function(jsnResponse) {
str=jsnResponse.address;
});
}else{
str = 'No value';
}
return str;
}
这是我编写的函数,问题是当调用此函数时,它首先执行返回str行并返回空白,然后执行if语句并再次返回正确的值。
任何帮助将不胜感激。谢谢
答案 0 :(得分:2)
试试这个:
var str ='';
function myFormatter(cellvalue, options, rowObject) {
if(rowObject.name== 'test'){
$.getJSON(loadUrl, function(jsnResponse) {
return str=jsnResponse.address;
});
}else{
return str = 'No value';
}
}
答案 1 :(得分:0)
该函数正在调用一个promise。而不是从调用promise的函数返回,订阅promise,在调用promise回调时执行你的逻辑。您已经在回调中填充了变量,因此在那里执行其余的逻辑:
$.getJSON(loadUrl, function(jsnResponse) {
str=jsnResponse.address;
DoStuff(str);
});
答案 2 :(得分:0)
这是因为getJSON是异步函数。你可以使用$ .ajax和async:false而不是getJSON,比如:
$.ajax({
dataType: "json",
url: loadUrl,
async: false,
success: function(response) { ... }
});
但我建议改用回调,例如:
var str ='';
function myFormatter(cellvalue, options, rowObject, callback) {
if(rowObject.name== 'test'){
$.getJSON(loadUrl, function(jsnResponse) {
if(typeof(callback) === 'function'){
callback(jsnResponse.address);
}
});
} else {
str = 'No value';
}
return str;
}
然后称之为:
myFormatter('...', '...', rowObject, function(str) {
// Here you will receive the value asynchronously.
});