【问题标题】:Return Value from inside of $.ajax() function从 $.ajax() 函数内部返回值
【发布时间】:2011-11-18 18:26:54
【问题描述】:

如何从$.ajax 函数内部返回值?

这是我的基本设置:

function something(){
 var id = 0;
 $.ajax({
        'url':'/some/url',
        'type':'GET',
        'data':{'some':'data'},
        'success':function(data){
                     id = data['id'];
         }
   });

  return id;
}

【问题讨论】:

标签: jquery ajax


【解决方案1】:

除了使用其他人指出的回调函数外,另一种选择是将其更改为synchronous 请求:

function something(){
 var id = 0;
 $.ajax({
        'url':'/some/url',
        'type':'GET',
        'async':false,
        'data':{'some':'data'},
        'success':function(data){
                     id = data['id'];
         }
   });

  return id;
}

请记住,当请求处于活动状态时,同步调用是阻塞调用。

【讨论】:

  • 如果您正在执行诸如表单字段验证之类的操作,并且您实际上希望在显示其他字段之前等待服务器的回复,例如,尽管您可能希望包含超时,那么这是一个很好的答案。
【解决方案2】:

使用回调函数,就是JavaScript方式:

function something(callback){
 $.ajax({
        'url':'/some/url',
        'type':'GET',
        'data':{'some':'data'},
        'success': callback
   });
}

something(function (data) {
    data['id']; // use it here
})

【讨论】:

    【解决方案3】:

    由于 AJAX 是异步的,因此您不能,因为您的 AJAX 调用不会立即返回。你可以做的,人们通常做的,是接受一个回调函数,然后用返回值调用它。例如:

    function something(callback) {
         var id = 0;
         $.ajax({
                'url':'/some/url',
                'type':'GET',
                'data':{'some':'data'},
                'success':function(data){
                     callback(data['id']);
                 }
           });
    }
    
    something(function(id) {
        alert(id);
    });
    

    请注意,您始终可以使您的请求同步,并且它会等到它有数据并且您可以立即返回它,但如果您的请求花费的时间超过很短的时间,则整个脚本执行以及可能的页面将是停止直到它返回。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2018-07-09
      • 1970-01-01
      相关资源
      最近更新 更多