Jquery ajax请求无法将数据返回给其他函数

时间:2012-06-27 09:41:20

标签: javascript ajax jquery

我正在使用jquery创建一个简单的ajax请求。下面是我的ajax功能。

     var makeJqueryAjaxRequest = function(arrParam) {
         var request = $.ajax({
             url : arrParam['url'],
             async: false,
             type: arrParam['type'],
             data: arrParam['data'],
             dataType: arrParam['data_type'],
             success: function(data) {
                 if(data){ 
                 return data;   
                 }
             }
         });
     }

这是我的函数调用:

      var items = {
       "type" : 'POST',
       "url" : ajaxGetUrl,
       "data" : arrParam['data'],
       "data_type" : 'html'
      };
      var msg = makeJqueryAjaxRequest(items);

现在不知道为什么我的makeJqueryAjaxRequest函数总是返回null值。如果我成功提醒数据:我的数据是完美的。但是当我尝试返回时,它会给我空值

1 个答案:

答案 0 :(得分:8)

  

您无法从异步回调函数返回值。

因为success是一个async回调,当ajax Event(success in this case)触发时,jQuery会调用该回调。因此,从这些函数返回一些内容将不会产生任何影响,因为它们将返回到jQuery代码。

您可以使用以下

var makeJqueryAjaxRequest = function(arrParam) {
     var request = $.ajax({
        url : arrParam['url'],
        async: false,
        type: arrParam['type'],
        data: arrParam['data'],
        dataType: arrParam['data_type']

     });
   return request;
  }

然后做

 makeJqueryAjaxRequest(items).done(function(data){
    if(data){
      var msg  = data;  
      // do whatever you like with msg now
    }
 });

备用回调方法:

var makeJqueryAjaxRequest = function(arrParam,callback) {
     var request = $.ajax({
        url : arrParam['url'],
        async: false,
        type: arrParam['type'],
        data: arrParam['data'],
        dataType: arrParam['data_type'],
        success: function(data) {
           if(data){ 
              callback(data); 
           }
       }
     });

  }

然后像

一样使用它
 makeJqueryAjaxRequest(items,function(data){
    // do whatever you like with data
 });

Doc $.ajax()

注意

使用这些方法中的任何一种async: false都不是必需的。你可以删除它。正如医生说的那样

  

从jQuery 1.8开始,不推荐使用 async:false