地图中的Javascript变量评估

时间:2009-04-10 23:25:47

标签: javascript jquery

我试图通过jQuery的$.post()传递一些数据,我遇到了一些问题,我只能归类为数据映射中的变量评估。让我们来看看:

var field = 'fooVar';
var value = 'barVar';
$.post('/path/to/url', { field:value, 'fooString':'barString' });

最终结果是具有以下值的POST:

// Actual result
field = barVar
fooString = barString

// Expected result    
foo = barVar
fooString = barString

我希望“field”在数据图中被评估为变量“foo”,但事实并非如此。我能够辨别的是“key”上的单引号是可选的,因此将它们排除不会导致变量被评估。

我还尝试了以下几个运气量的笑声:

$.post('/path/to/url', { "'" + field + "'":value, 'fooString':'barString' });
$.post('/path/to/url', { eval(field):value, 'fooString':'barString' });

我很难过。感谢您提供的任何帮助,甚至只是一个坚定的“不”,这样我就可以继续我的生活,知道一个更精通的人,我的背后会受到赞赏。 :)

4 个答案:

答案 0 :(得分:10)

var field = 'fooVar';
var value = 'barVar';
var postData = {};
postData[field] = value;
postData['fooString'] = 'barString';
$.post('/path/to/url', postData);

即使存在构建此内联的方法(正如您希望here那样),您最好通过事先构建对象来完成您所做的事情 - 请参阅this Encosia article < / p>

答案 1 :(得分:4)

正确,Javascript“map”(对象)不评估其键。如果你需要评估密钥,你可以这样做:

var key = 'name';
var value = 'john';
var options = {key: value}; // translates to "key=john"

options[key] = value; // translates to "name=john"

$.post('path', options);

答案 2 :(得分:2)

这是一个可能的答案。

var field = 'fooVar';
var value = 'barVar'

var data = { fooString:'barString' }
data[field] = value;

$.post('/path/to/url', data);

// Result
fooVar = barVar
fooString = barString    

尽管如此,我仍然很好奇这是否可以内联(比如在原始示例中)而不是事先构建地图。

答案 3 :(得分:-1)

如果您在单个表达式中设置它,您可以编写一个如下所示的辅助函数(未经测试):

function objectFromPairs() {
    var o = {};
    for (var i = 0; i < arguments.length; i += 2) {
        o[arguments[i]] = arguments[i+1];
    }
    return o;
}

$.post('/path/to/url', objectFromPairs(field, value, 'fooString', 'barString'));

但是,就使用对象文字而言,不,没有办法将表达式的值用作键。属性必须以数字文字,字符串文字或有效标识符的形式给出(参见ECMAscript spec的第41-42页)。