Javascript 如何将$.ajax对象传递给另一个函数?

Javascript 如何将$.ajax对象传递给另一个函数?,javascript,jquery,Javascript,Jquery,此函数将在一般ajax Cals中使用: function f_AjaxFunction(_param) { var objectWillReturn; $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: 'WS/wsGenral.asmx/f_QueryAndGetResultAsJson', data: "{_sP

此函数将在一般ajax Cals中使用:

function f_AjaxFunction(_param) {
    var objectWillReturn;
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: 'WS/wsGenral.asmx/f_QueryAndGetResultAsJson',
        data: "{_sParam:'" + _param + "'}",
        dataType: "json",
        success: function(data) {
            var txt = "";
            try {
                objectWillReturn = data;
            }
            catch (err) {
                alert(err.description);
            }
        }
    });
    return objectWillReturn ;
}
此函数正在调用上面的另一个函数:

    function f_HavaDurumu(_paramm) {
        var obj;
        obj = f_AjaxFunction(_paramm);
        $("#spanShow").html(obj.d);
    }

您必须使用回调,因为调用是非同步进行的:

function f_AjaxFunction(_param, callback) {
  $.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      url: 'WS/wsGenral.asmx/f_QueryAndGetResultAsJson',
      data: "{_sParam:'" + _param + "'}",
      dataType: "json",
      success: function(data) {
          var txt = "";
          try {
              if($.isFunction( callback(data) )){
                callback(data);
              }
          }
          catch (err) {
              alert(err.description);
          }
      }
  });
}

function f_HavaDurumu(_paramm) {
    f_AjaxFunction(_paramm, function(data){
      $("#spanShow").html(data.d);  
    });
}
我想不出您的代码会在Try块中导致错误的情况,但我保留了它,因为您从那里开始

更新

为了进一步说明这一点:

function get_ajax(){
    var ran = false;
    $.ajax({ 'url':'/some/url', success: function(data){
        ran = true;
    });
    return ran;
}

alert(get_ajax()); // alerts "false"
它按以下顺序运行:

  • run
    设置为
    false
  • 启动AJAX请求
  • 返回
    run
  • AJAX完成,将
    run
    设置为true
  • 但是,如果使用回调,则可以使事情保持有序,以便它们按如下方式执行:

  • 启动AJAX请求
  • AJAX完成后,使用返回数据执行回调

  • 您必须使用回调,因为调用是非同步进行的:

    function f_AjaxFunction(_param, callback) {
      $.ajax({
          type: "POST",
          contentType: "application/json; charset=utf-8",
          url: 'WS/wsGenral.asmx/f_QueryAndGetResultAsJson',
          data: "{_sParam:'" + _param + "'}",
          dataType: "json",
          success: function(data) {
              var txt = "";
              try {
                  if($.isFunction( callback(data) )){
                    callback(data);
                  }
              }
              catch (err) {
                  alert(err.description);
              }
          }
      });
    }
    
    function f_HavaDurumu(_paramm) {
        f_AjaxFunction(_paramm, function(data){
          $("#spanShow").html(data.d);  
        });
    }
    
    我想不出您的代码会在Try块中导致错误的情况,但我保留了它,因为您从那里开始

    更新

    为了进一步说明这一点:

    function get_ajax(){
        var ran = false;
        $.ajax({ 'url':'/some/url', success: function(data){
            ran = true;
        });
        return ran;
    }
    
    alert(get_ajax()); // alerts "false"
    
    它按以下顺序运行:

  • run
    设置为
    false
  • 启动AJAX请求
  • 返回
    run
  • AJAX完成,将
    run
    设置为true
  • 但是,如果使用回调,则可以使事情保持有序,以便它们按如下方式执行:

  • 启动AJAX请求
  • AJAX完成后,使用返回数据执行回调

  • 正如Doug所说,您将需要使用异步回调。f_ajax函数在数据可用之前返回


    另一种选择是。

    正如Doug所说,您将需要使用异步回调。f_ajax函数在数据可用之前返回


    另一种选择是。

    如何将返回对象设置为调用函数的新对象?我不能设置=>var newObj=f_AjaxFunction(“hihi”);否,函数在调用
    $.ajax
    后立即返回,因为调用是异步的,并且从当前执行队列中拉出。其余的调用必须在回调事件中处理,否则它将在AJAX调用返回之前执行。有意义吗?如何将返回对象设置为调用函数的新对象?我不能设置=>var newObj=f_AjaxFunction(“hihi”);否,函数在调用
    $.ajax
    后立即返回,因为调用是异步的,并且从当前执行队列中拉出。其余的调用必须在回调事件中处理,否则它将在AJAX调用返回之前执行。有道理?