2012-08-16 46 views
0

我創建了一個JavaScript對象和一個函數來構建對象的新實例。我現在需要在我的頁面上使用這個對象,但沒有任何運氣,我覺得我錯過了一些東西。JavaScript將對象從包含文件傳遞到頁面

JS包含文件

function MyObject() { 
    this.ID = 0; 
    this.Name = ""; 
} 

function GetObject(param1, param2) { 
    //ajax call to get json string 
    $.ajax({ //leaving out details this part works 
    success: function(data) { 
     var jsonData = $.parseJSON(data.d); 

     var myObj = new MyObject(); 
     myObj.ID = jsonData[0].ID; 
     myObj.Name = jsonData[0].Name; 

     return myObj; 
    }); 
} 

該調用工作正常,但是當我嘗試訪問的頁面,我得到undefined

<script type="text/javascript"> 
    $(function() { 
     var o = GetObject(1, 2); 
    }); 
</script> 

我上的數據通過將DOM對象傳遞給函數和屁股可以實現它的工作在那裏忽略它。

function GetObject(param1, param2, domObj) { 
    //ajax call to get json string 
    $.ajax({ //leaving out details this part works 
    success: function(data) { 
     var jsonData = $.parseJSON(data.d); 

     var myObj = new MyObject(); 
     myObj.ID = jsonData[0].ID; 
     myObj.Name = jsonData[0].Name; 

     domObj.text(myObj); 
    }); 
} 

然而,這並不爲我的應用程序,因爲我拉了很多對象,並想只引用它們的頁面上工作。我錯過了什麼?任何幫助是極大的讚賞。

+0

您可以將一個回調參數添加到'GetObject()',並在'$ .ajax'成功回調中調用它。 – jrummell 2012-08-16 19:11:28

回答

5

剛剛辭職的GetObject這樣的:

function GetObject(param1, param2, callback) { 
    //ajax call to get json string 
    $.ajax({ //leaving out details this part works 
    success: function(data) { 
     var jsonData = $.parseJSON(data.d); 

     var myObj = new MyObject(); 
     myObj.ID = jsonData[0].ID; 
     myObj.Name = jsonData[0].Name; 

     // pass myObj via callback function parameter 
     return callback(myObj); 
    }); 
} 

現在這樣稱呼它:

$(function() { 
    var o = {}; 
    GetObject(1, 2, function(response) { 
     o = response; 
    }); 
}); 

由於內GetObject有一個AJAX請求(異步處理)和對象返回後,ajax success函數執行,所以你需要藉助callback功能。

+1

+1打我吧:)另外值得注意的是,這是必要的,因爲ajax是異步的,所以GetObject在ajax調用完成之前返回。此外,在成功回調中調用'return'只是從該匿名函數返回,而不是周圍的GetObject函數 – MrOBrian 2012-08-16 19:12:53

+0

通過這樣做,我可以使用具有點符號的對象引用屬性嗎? 'o.Name'還是會是'o [「Name」]'?我能夠這樣做,把它設置爲一個新的對象'var = new MyObject();'謝謝! – jon3laze 2012-08-16 19:20:53

相關問題