首先执行JQuery函数return语句,然后只执行内部条件

时间:2014-08-21 05:39:07

标签: javascript jquery

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语句并再次返回正确的值。

任何帮助将不胜感激。谢谢

3 个答案:

答案 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.
});