2017-05-04 52 views
0

即时尝试从ajax函数获取数据到我的实际应用程序,但我似乎无法通过函数以外的数据,我阅读其他问题,并尝试他们的建议,但它似乎并没有工作因为它不是等待阿贾克斯试图返回数据之前完成加载, IM试图返回UID,这样我可以这样做返回嵌套在ajax回调中的数据

user = getUserID('test'); 

,而不是

getUserID('user', function(id){ console.log(id); }); 

因为我分配将数据返回给var iable

getUserID = function(user, cb) { 
    var uid; 
    $.ajax({ 
     type: "GET", 
     url: "/user_comment.php", 
     data: { 
      user: user 
     }, 
     success: function(result) { 
      if (result) { 
       uid = /name="recipient_id" value="(.*)"/g.exec(result)[1]; 
       console.log('1 ' + uid); 
       if(cb) { 
        try { 
         cb(null, uid); 
        } catch(e) { cb(e); } 
       } 
      } else { 
       console.log("ERROR!! - No data returned !") 
      } 
     } 
    }); 
    console.log('2 ' + uid); 
    return uid; 
}, 

所有它现在是

2 undefined 
1 5511194 
2 undefined 
1 1462473 
2 undefined 
1 5469682 

所以没有设置变量

回答

0

之前的任何值被应用到它您的代码返回的“UID”的值。你可以看到你的变量被设置为“成功”回调。这意味着只有在异步调用完成后才会调用此回调。你的“getUserID”函数将结束,并且“return”语句将在回调之前执行。在调试器中玩你的代码,你会看到实际发生的事情。所以你应该做的是在“成功”回调中使用返回的值,而不是从“getUserID”返回的值。就像这样:

getUserID('test', function(uid){ 
... do your stuff here => uid is defined and has the value you're looking for 
}); 

但只是不要试图做这样的事情:

var uid = getUserID('test'); 
... things and stuff 
+0

一旦你确定这一点,你应该阅读有关承诺:https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise – jackstrapp

+0

是否无法将变量设置为返回ajax调用?所以来自ajax调用的信息是不可用的,除非我将它分配给页面上的元素? – Brofessional

+0

修改数组中的元素:array.forEach(function(item){item.prop =“toto”;}); 对于你所问的关于Ajax的问题​​,我真的建议你阅读它的工作原理。并玩你的代码。尝试在ajax调用之前,在ajax调用之后并在回调之内放置断点。因为你好像不理解这个概念。但我可能是错的。 – jackstrapp