1

我试图创建一个 ajax 函数来每次获取数据库的一些参数,但是当我调用 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"));

});
4

2 回答 2

4

foo无法返回ajax调用的结果,因为ajax调用是异步的。foo在调用完成之前返回。此外,return您的处理程序中done的 是从处理程序返回的done,而不是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);
  });

});
于 2013-10-27T18:47:09.953 回答
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");
});
于 2013-10-27T18:50:28.973 回答