【问题标题】:How can i pass $.ajax object to another function?如何将 $.ajax 对象传递给另一个函数?
【发布时间】:2010-01-16 16:57:39
【问题描述】:

这个函数一般会用到ajax calss:

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);
    }

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您将不得不使用回调,因为调用是异步进行的:

    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"
    

    它按这个顺序运行:

    1. run 设置为false
    2. 启动 AJAX 请求
    3. 返回run
    4. AJAX 完成,将 run 设置为 true

    但是,如果你使用回调,你可以保持事情的顺序,这样它们就会像这样执行:

    1. 启动 AJAX 请求
    2. AJAX 完成,使用返回数据执行回调

    【讨论】:

    • 如何将返回对象设置为调用函数的新对象?我不能设置 => var newObj = f_AjaxFunction("hihi");
    • 否,函数调用$.ajax后立即返回,因为调用是异步的,被拉出当前执行队列。调用的其余部分必须在回调事件中处理,否则它将在 AJAX 调用返回之前执行。有意义吗?
    【解决方案2】:

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

    另一种选择是Javascript Strands

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2021-09-23
      • 2018-11-28
      相关资源
      最近更新 更多