Ajax回调并没有回归

时间:2013-10-27 18:45:43

标签: javascript jquery ajax

我试图创建一个ajax函数来获取每次DB的一些参数,但是当我调用ajax方法时它没有正确返回,当我这样做时调试值是正常的,但是返回的结果不是的工作原理。

$(document).ready(function () {

  function foo(mod){
    var uri="some url";

    $.ajax({
      type: "GET",
      url: uri,
    }).done(function( data ) {
      return data;
    });
  }

  // alert to get the result is always printing undefined
  alert(foo("param_1"));

});

2 个答案:

答案 0 :(得分:4)

foo无法返回 ajax调用的结果,因为ajax调用是异步foo在呼叫完成之前返回。此外,return处理程序中的donedone处理程序返回,而不是foo

您需要foo接受回拨,然后调用:

$(document).ready(function () {


  function foo(mod, callback){
    var uri="some url";

    $.ajax({
      type: "GET",
      url: uri,
    }).done(function( data ) {
      callback(data);
    });
  }

  // alert to get the result is always printing undefined
  foo("param_1", function( data ) {
      alert(data);
  });

});

或者如果您在回复之前确实没有对进行处理,那么您可以直接向callback提供done

$(document).ready(function () {


  function foo(mod, callback){
    var uri="some url";

    $.ajax({
      type: "GET",
      url: uri,
    }).done(callback);
  }

  // alert to get the result is always printing undefined
  foo("param_1", function( data ) {
      alert(data);
  });

});

答案 1 :(得分:0)

您可以将async设置为false,但我建议您实现可以异步工作的成功和错误处理程序

$(document).ready(function() {

    function foo(mod) {
        var uri = "some url";

        $.ajax({
            type: "GET",
            url: uri,
            success: successHandler,
            error: errorHandler
        });
    }

    function successHandler(data, textStatus, xhr) {
        // Handle your data here
        console.log(data);
        //alert(data);
    }

    function errorHandler(xhr, textStatus, errorThrown) {
        // Magic
    }

    // alert to get the result is always printing undefined
    //alert(foo("param_1"));
    foo("param_1");
});