我是一个老'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()
更新参数传递的最佳方法是什么?
感谢
迷你
答案 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()