1

毎回DBのいくつかのパラメータを取得するために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

fooajax 呼び出しは非同期であるため、ajax 呼び出しの結果を返すことはできません。呼び出しが完了する前に戻ります。さらに、ハンドラーのは、 ではなく、ハンドラーから返されます。fooreturndonedonefoo

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 に答える