2015-11-07 59 views
0

應該有這個問題做了合理的解釋,但我不能找到任何東西。我在我的javascrtipt應用程序中使用OOP,並試圖將變量值設置爲函數。JavaScript變量值顯示有前

對於第一值init_s.__temp_var等於空對象。在我調用函數logic_s.get_active_statuses(..)之後,它應該被覆蓋。但事實並非如此。操作:

var widget = { 
    settings: { 
     __temp_var: {} 
    }, 

    init: function() { 
     init_s = this.settings; 
     logic_s = this.functions_available; 
    }, 

    functions_available: { 
     get_active_statuses: function (id) { 
      jQuery.ajax({ 
      url: ....., 
      type: 'POST', 
      dataType: 'JSON', 
      data: { 
       .... 
      }, 
      success: function (data) { 
       init_s.__temp_var = data; // not working 
       return data; // undefined 
      }, 
      error: function (e) { 
       console.log(e.message); 
      } 
     }); 
     } 
    }, 

    my_actions: { 
     logic: function() { 
      var active_services_status = logic_s.get_active_statuses(5); 
      console.log(init_s.__temp_var); // should print {id : 5} 
      console.log(active_services_status); // if used with return prints "undefined" 
     } 
    } 
}; 

所以當我打電話logic_s.get_active_statuses(5);首次,它loggs我空對象,但是當我把它稱爲第二次,它loggs我{id : 5}。如果第三次變量爲10,則將在第四次調用後打印。這是爲什麼發生?這似乎是打印後正在設置變量..

編輯:

事情是這樣的工作並返回「未定義」:

function get_active_status (id) { 
       jQuery.ajax({ 
       url: ....., 
       type: 'POST', 
       dataType: 'JSON', 
       data: { 
        .... 
       }, 
       success: function (data) { 
        return data; // undefined 
       }, 
       error: function (e) { 
        console.log(e.message); 
       } 
      }); 
      }; 

get_active_status(5); // returns "undefined" instead of object that was sended 
+0

請提供的jsfiddle – dude

+0

'get_active_statuses'中有沒有'return',所以'VAR active_services_status'是不會做太多... –

+0

但如果我讓它像這個'get_active_statuses:function(id){ return id; }'它打印我「未定義」。邏輯僅僅是一個例子,'get_active_statuses'是一個Ajax調用成功呼叫 –

回答

1

當你使用AJAX,你請求是asynchronous。這意味着,在這裏將一些請求

logic_s.get_active_statuses(5)

,它等待響應(您收到了來自服務器的響應後,才成功執行),並繼續執行

console.log(init_s.__temp_var); // should print {id : 5} 
console.log(active_services_status); // if used with return prints "undefined" 

你可以做的是使用setTimeout(),然而這破壞了異步行爲的任何功能。 另一種方式 - 查找選項異步默認爲真。你的功能是:

function get_active_status (id) { 
      jQuery.ajax({ 
      url: ....., 
      type: 'POST', 
      dataType: 'JSON', 
      async: false, 
      data: { 
       .... 
      }, 
      success: function (data) { 
       return data; // undefined 
      }, 
      error: function (e) { 
       console.log(e.message); 
      } 
     }); 
     }; 
+0

問題編輯問題setTimeout之後的下一個選項是什麼?成功對我來說不好 –

+0

在ajax中有一個選項_async_,默認情況下是true,它應該有所幫助。 –

+0

之前試了一下,沒幫 –