2015-06-18 89 views
-1

Ajax獲取數據正常,但我不知道如何從if語句返回varname,內部循環,內部函數;)。 如何從此聲明中返回var username?謝謝。從函數返回,ajax

$.ajax({ 
     dataType: 'json', 
     url: 'example.com', 
     type: 'POST', 
     success: function (data) { 
      for (var i = 0; i < data.users.length; i++) { 
      if (user_id == data.users[i].id) { 

       var username = data.users[i].username; 
       return username; // !!!How can return this 

        }; 
       }; 
      } 
     }) 

console.log(username) // error: username is not defined 
+1

阿賈克斯是異步的:http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call –

回答

0

Ajax是異步的。 您應該使用回調。

var callback = function(username) { 
    // Do something with username here 
    console.log(username); 
} 

$.ajax({ 
     dataType: 'json', 
     url: 'example.com', 
     type: 'POST', 
     success: function (data) { 
      for (var i = 0; i < data.users.length; i++) { 
      if (user_id == data.users[i].id) { 

        var username = data.users[i].username; 
        // call the callback 
        callback(username); 

        }; 
       }; 
      } 
     }); 
+0

謝謝。它對我的幫助。 – McG

+0

不客氣。 –

1

默認情況下,ajax將被異步執行。這意味着,返回的結果在回調進行處理:

$.ajax({ 
    dataType: 'json', 
    url: 'example.com', 
    type: 'POST', 
    success: function (data) { 
    for (var i = 0; i < data.users.length; i++) { 
     if (user_id == data.users[i].id) { 
     var username = data.users[i].username; 
     console.log(username); 
     } 
    } 
    } 
}); 

AJAX可以與異步設置爲false來執行,但是這通常不推薦,直到你得到的響應,將鎖定用戶界面服務器。

-1

將其聲明爲全局變量。

var username; 
$.ajax({ 
    dataType: 'json', 
    url: 'example.com', 
    type: 'POST', 
    success: function (data) { 
     for (var i = 0; i < data.users.length; i++) { 
     if (user_id == data.users[i].id) { 

      username = data.users[i].username; 
      return username; // !!!How can return this 

       }; 
      }; 
     } 
    }) 

console.log(username); 

或直接發送到ajax成功函數。

+0

它不會改變結果... console.log(用戶名)會記錄未定義,因爲ajax將異步執行。 –

+0

是的,我提到最好的方法是將它發送到一個函數, – Varun