如何将变量用作对象初始化器中的键

在我正在使用的应用程序中,服务器页面用于接收输入的名称作为其值的键。 有可能用ajax做到这一点吗? 在此示例中,thisName被视为文字字符串。

$('table').each(function(){ $(this).delegate("input", "focusout", function(){ var thisValue = $(this).val(); var thisName = $(this).attr('name'); $.ajax({ timeout: 3000, //cache: false, data: { p_session_id: $("[name='p_session_id']").val(), p_username: $("[name='p_username']").val(), thisName: thisValue // ^^ }, success: function(data){ alert( data ) } }); }); 

不幸的是,在对象初始化器中, :左侧的部分不被视为变量而是被视为字符串,因此the_key被视为与"the_key"相同。

这是我可以想到的添加动态名称属性的最简单的方法:

 var fields = { p_session_id: $("[name='p_session_id']").val(), p_username: $("[name='p_username']").val() } fields[thisName] = thisValue; 

然后使用$.ajax调用中的data: fields作为data: fields

也许不那么优雅但是:

 function makeObj (a) { if (!(a instanceof Array)) throw ('Attempt to build object from ' + (typeof a)); if (a.length % 2) throw ('Attempt to build object from an array length ' + a.length); for (var o = {}, i = a.length - 1; i > 0; i -= 2) { console.log (a[i-1], a[i]); o[a[i - 1]] = a[i]; } return o; } var thisName = 'Hans PUFAL'; var thisValue = 'Paleoinformaticien'; var session_id = '123edrft456fg'; var o = makeObj (['p_session_id', session_id, 'p_username', 'HBP', thisName, thisValue]); 

可在此处获取: http : //jsfiddle.net/jstoolsmith/bZtpQ