涉及AJAX的函数不返回值 - jQuery

时间:2014-08-27 19:34:38

标签: javascript php jquery ajax

我有一个像这样的document.ready函数;

  function myfun(){
    var xx;
    $.ajax({
        type: 'POST',
        url: 'handler.php',
        cache: false,
        success: function(result) {
          xx = result;
        },
    });
    return xx;
  }


  var a;
  a = myfun();
  alert(a);

handle.php设置为echo 1234。但是我得到了警觉,因为"未定义"。我怎样才能解决这个问题?预期的警报是" 1234" (来自ajax处理程序的回复)。

3 个答案:

答案 0 :(得分:1)

这是异步的。使用回调:

function myfun(){

    return $.ajax({
        type: 'POST',
        url: 'handler.php',
        cache: false
    });
}

myfun().done(function(data){
    console.log(data);
});

或者,如果您使用的是没有延迟对象的旧jQuery版本:

function myfun(done){

    $.ajax({
        type: 'POST',
        url: 'handler.php',
        cache: false,
        success: done
    });
}

myfun(function(data){
    console.log(data);
});

https://stackoverflow.com/search?q=ajax+not+returning+data

答案 1 :(得分:0)

因为你在ajax调用完成之前返回了值,ajax调用默认为异步,你可以在alert回调中success,此时你的变量将具有你设置的值:

function myfun(){
  var xx;
  $.ajax({
      type: 'POST',
      url: 'handler.php',
      cache: false,
      success: function(result) {
        xx = result;
        alert(xx);
      },
  });
}

myfun();

答案 2 :(得分:0)

这是异步调用的问题。您可以重写代码,例如:

var xx;
  var a;

  function myfun(){
    $.ajax({
        type: 'POST',
        url: 'handler.php',
        cache: false,
        success: function(result) {
          xx = result;
        },
    });
  }

 myfun();
 alert(xx);