【问题标题】:Jquery ajax request not able to return data to other functionJquery ajax请求无法将数据返回给其他函数
【发布时间】:2012-06-27 09:41:20
【问题描述】:

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

【问题讨论】:

  • 您不能从 Asynchronous 函数返回值。这已经回答了很多次了。你必须使用回调函数。
  • @joy 谢谢 :) 我是 jquery 的新手。你能给我一个回调函数的例子吗

标签: javascript ajax jquery


【解决方案1】:

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

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

$.ajax() 上的文档

注意

使用这两种方法中的任何一种都不需要async: false。你可以删除它。正如医生所说

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

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多