ajax返回值

时间:2012-10-16 19:13:10

标签: jquery ajax post

我正在做一个噩梦试图这样做。 到目前为止,我必须尝试过15种不同的方法,这些方法来自我读过的不同帖子,但都失败了。

我只是想从ajax帖子中获取返回值。 这是我的代码

var test = compareNew(this.name, "remove");
alert(test);

function compareNew(obj, action) {
  $.ajax({
    url: "AJAX_compare_server.php",
    type: 'post',
    data: {
      compare_id:  obj,
      action:   action
    },
      success: function (result) {
      var myObject = eval("(" + result + ")");
      alert(myObject.html);
      return(result);
    }
  });
}

警报(myObject.html);正确地显示我返回的html但警报(测试);告诉我'未定义'。 我已经花了好几个小时,但无法弄明白。 你能看到我错过的东西吗?

10 个答案:

答案 0 :(得分:2)

实际上return无法在asynchronous来电中使用,但是如果你设置async:false那么它会起作用,在这个(同步通话)情况下你可以试试这个

function compareNew(obj, action) {
    $.ajax({
        url: "AJAX_compare_server.php",
        type: 'post',
        data: {
            compare_id:  obj,
            action:   action
        },
        success: function(result) { 
            returnresult(result); // will call the function and will alert
        }
    });
}

function returnresult(ret){
    // Do whatever you want to do with the result
    if(ret) alert(ret);
}
compareNew(this.name, "remove");

你也可以像

一样使用它
function compareNew(obj, action, callBack) {
    $.ajax({
        //...
        success: function(result) { 
            callBack(result);
        }
    });
}

并称之为

compareNew(this.name, "remove", function(data){
    alert(data);
});

答案 1 :(得分:1)

仅函数将返回值。 你应该使用ajax的返回方面.....

答案 2 :(得分:0)

ajax调用是异步的。一旦启动,javascript将继续执行并退出您的功能。成功处理程序中的return语句是对该匿名函数的返回,而不是对compareNew函数的return语句。 undefined是我期望从您的脚本中获得的结果。

你应该做的是让success函数调用你定义的另一个函数,该函数应该对你的ajax调用返回的值执行工作。

如果您希望您的方法同步,可以设置一个选项(可能是您已经尝试过的选项之一)。在您的成功处理程序中,将一个作用于您的函数的变量设置为您想要返回的值,然后在ajax方法调用之后返回该值。我建议不要这样做,因为在调用等待返回时,使ajax调用同步会阻止执行任何其他javascript,这通常会导致用户体验不佳。

答案 3 :(得分:0)

这里有两点需要注意。

  1. 你的ajax调用是异步的,这意味着它在alert(test)运行后完全有可能返回。
  2. return (result)未从compareNew返回。它从您创建的success函数返回

答案 4 :(得分:0)

无法从Ajax获得返回值。

是异步

答案 5 :(得分:0)

您使用return作为方法

Corect是:

return result;

答案 6 :(得分:0)

Ajax是异步的,因此在完成ajax调用的结果之前执行alert(test);。这就是你未定义的原因。

答案 7 :(得分:0)

将async设置为false,然后在success语句中设置返回值。在方法结束时(在ajax请求之外),返回retVal。

function compareNew(obj, action) {
  var retVal;
  $.ajax({
    url: "AJAX_compare_server.php",
    type: 'post',
    data: {
      compare_id:  obj,
      action:   action
    },
    async: false,
    success: function (result) {
      var myObject = eval("(" + result + ")");
      retVal = myOBject.html;
      alert(myObject.html);
    }
  });
  return retVal;
}

答案 8 :(得分:0)

如果你有firefox进行测试,你可以通过将警报转换为console.log()来查看异步调用的工作原理。并打开控制台。这将显示您正在转储的文本,并为您的ajax帖子提供可视化表示(以及数据的进展)。你可以看到测试var如何立即执行,顺便说一句,如果你想测试至少被定义,尝试让compareNew返回“something”;在底部,好像ajax甚至不存在。

var test = compareNew(this.name, "remove");
console.log(test);

function compareNew(obj, action) {
  $.ajax({
    url: "AJAX_compare_server.php",
    type: 'post',
    data: {
      compare_id:  obj,
      action:   action
    },
      success: function (result) {
      var myObject = eval("(" + result + ")");
      console.log(myObject.html);
      //return(result); //this line isn't gonna do anything.
    }
   return "something";
  });
}

`

答案 9 :(得分:0)

您无法从异步调用中获取返回值,例如AJAX请求。 原因是等待响应的代码已经在收到响应时执行。 解决方案是在success:回调中运行必要的代码。

function compareNew(obj, action) {
  $.ajax({
    url: "AJAX_compare_server.php",
    type: 'post',
    data: {
      compare_id:  obj,
      action:   action
    },
      success: function (result) {
        // Run the code here that needs
        //    to access the data returned
        return result;
    }
  });
}

或者你可以在success:回调

中调用另一个函数
function compareNew(obj, action) {
      $.ajax({
        url: "AJAX_compare_server.php",
        type: 'post',
        data: {
          compare_id:  obj,
          action:   action
        },
          success: function (result) {
            callFuction(result)
            return result;
        }
      });
    }

你也可以让它同步。你需要async:false来实现它。

function compareNew(obj, action) {
var return_this;
$.ajax({
url: "AJAX_compare_server.php",
type: 'post',
async: false,
data: {
  compare_id:  obj,
  action:   action
},
success: function (result) {
            return_this = result;
    }
  });
return return_this;
}