Javascript& Ajax - 填充对象的更好方法?

时间:2013-11-26 11:29:44

标签: javascript jquery ajax

我是一个老'C'程序员,并且Javascript总是很难在ajax调用之后填充我的数据;即我总是求助于使用全球参考。我宁愿能够传递我需要更新的对象。这是我现在做的一个例子 - 'app'是全局的(我在C中使用过指针)))

treeMapp.login = function ( dialog_div, form_div, server_call ) {

// validate the fields
if ( 0 ) {

}
else {
    // send to server & parse JSON response (single line)
    var jqxhr = 
        $.getJSON( server_call, 
            $( "#" + form_div ).serialize() )
            .done( function( data, status ) {

                 if( status == 'success' ) {
                     // hack!?
                     app.user.username = data.username;
                     app.user.organisation = data.organisation;
                     app.user.loggedIn = true;
                     //close the dialog
                     $( '#' + dialog_div ).dialog('close');
                 }
                 else {
                     // login failed
                     alert( "login failed!" );
                 }
            })
            .fail( function() {
                alert( "login: server error" );
        }); // end var jqxhr =

} // end else (field validation ok)   

}; // end treeMapp.login()

更新参数传递的最佳方法是什么?

感谢

迷你

2 个答案:

答案 0 :(得分:2)

您可以将app作为参数传递给treeMapp.login函数,然后在其范围内将其作为本地函数。

treeMapp.login = function ( dialog_div, form_div, server_call, app )

答案 1 :(得分:0)

您可以将jQuery结果返回的数据对象分配给app.user,从而避免逐个元素分配的需要。

即。 app.user = data

但是,通常确保全局对象可以通过方法自行初始化,或者将对全局对象的引用传递给方法,以便初始化。直接使用对全局变量的赋值是(除了少数例外)Javascript中的编程不如任何其他语言

更新:以下显示了答案的合并...

treeMapp.login = function ( dialog_div, form_div, server_call, theapp ) {
    var app = theapp; // may be needed for scope issue..

// validate the fields
if ( 0 ) {

}
else {
    // send to server & parse JSON response (single line)
    var jqxhr = 
        $.getJSON( server_call, 
            $( "#" + form_div ).serialize() )
            .done( function( data, status ) {

                 if( status == 'success' ) {
                     // not a hack
                     $.extend(this.app.user, data, { loggedIn: true })
                     //close the dialog
                     $( '#' + dialog_div ).dialog('close');
                 }
                 else {
                     // login failed
                     alert( "login failed!" );
                 }
            })
            .fail( function() {
                alert( "login: server error" );
        }); // end var jqxhr =

} // end else (field validation ok)   

}; // end treeMapp.login()