内部Jquery.post()函数返回undefined

时间:2013-01-31 13:19:26

标签: jquery function model-view-controller undefined encapsulation

我遇到以下Jquery代码的问题:

function isAuthorised() {
  $.post("Action/Controller")', function (data) {
    return data;
  });
}

我已经测试了MVC控制器的返回值,这很好。但是当我用以下内容检查授权时:

function onLoad() {
  var result = isAuthorised();
  alert(result); // undefined
  if (!result) 
    // redirect
}

返回的值未定义。我看过类似的帖子here并认为这可能是encapsulation的问题,但区别在于我需要返回从JQuery.post()检索到的值。

编辑:好的,我不想在回调中进行重定向,因此我现在尝试使用.Ajax并将Async设置为false来返回该值。我现在使用下面的代码返回[Object object]。有人可以解释现在的差异我将异步设置为false并帮助我返回值吗?

var request = $.ajax({
        url: 'Action/Controller',
        type: 'post',
        async: false
      });

      var result = request.done(function (data) {
        return data;
      });
      alert(result); // [Object object]

2 个答案:

答案 0 :(得分:1)

您应该检查jQuery ajax调用的dataType参数。根据您想要的返回值,显式设置dataType(xml,json,text,...)

可能是一个好习惯。

如果您要回赠json,它将被转换为JavaScript对象。从你的警报我假设是这样的。

尝试使用此mod获取字符串:

var request = $.ajax({
    url: 'Action/Controller',
    type: 'post',
    dataType: 'text',
    async: false
});

alert(request.responseText); // [now it will be outputted as text]

在同步中,ajax调用request将被填充为一个对象,因此您必须使用其中一个属性来提取数据。

答案 1 :(得分:0)

你不能从那里回来。 使用ajax,您必须以不同的方式构建代码,IE可以在回调中重定向

function isAuthorised() {
  $.post("Action/Controller", function (data) {
    if (!data) {
        //redirect
    }
  });
}

无论如何,使用javascript检查授权对我来说没有意义,你应该在服务页面服务器之前这样做