2012-08-16 79 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

相关问题