jQuery Ajax,async:false,返回undefined

时间:2017-09-28 23:31:54

标签: javascript jquery ajax

我有这个功能:

GetMessage: function (code) {
            var msg = localStorage.getItem(code);
            if (msg == null || msg == 'undefined') {
                $.ajax({
                    type: 'GET',
                    url: CTHelper.ApiUrl() + '/Api/Case/GetMessage?code=' + code,
                    async : false,
                    success: function (result) {
                        localStorage.setItem(code, result);
                        return result;
                    },
                    error: function (result) {
                        return '';
                    }
                });
            }
            else {
                return msg;
            }
        },

第一次调用它时,它会进入服务器($ .ajax)并在 localStorage 中存储一个值,因此第二次等调用会从缓存/存储中获取值

现在,它一直运行良好,但第一次调用,似乎成功函数中的返回结果总是返回未定义。

我认为设置 async:false 可以解决问题,但它没有

在说明我的问题的图片下面

enter image description here

1 个答案:

答案 0 :(得分:2)

2个回调函数successerror中的return语句不返回GetMessage函数 - 它们从回调中返回。如果您希望函数返回正确的消息,请将结果分配给msg并始终在GetMessage结尾处返回:

GetMessage: function(code) {
  var msg = localStorage.getItem(code);
  if (msg == null || msg == 'undefined') {
    $.ajax({
      type: 'GET',
      url: CTHelper.ApiUrl() + '/Api/Case/GetMessage?code=' + code,
      async: false,
      success: function(result) {
        localStorage.setItem(code, result);
        msg = result;
      },
      error: function(result) {
        msg = '';
      }
    });
  }

  return msg;
},

请参阅下面的结果

enter image description here

相关问题