2017-05-04 17 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