2

我正在使用 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 函数总是返回空值。如果我在成功提醒数据:我正在获得完美的数据。但是当我尝试返回时,它给了我空值

4

1 回答 1

8

您不能从异步回调函数返回值。

因为success是一个回调,当ajax 事件(在这种情况下为成功)触发async时由 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
 });

文档$.ajax()

笔记

async: false并且没有必要使用这些方法中的任何一种。你可以删除它。正如医生所说

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

于 2012-06-27T09:48:17.083 回答