2009-04-10 8 views
14

jQueryの$.post()でデータを渡そうとしていますが、私はデータマップで変数の評価として分類できるものでいくつかの問題が発生しています。マップ内のJavascript変数の評価

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 

私は「フィールドは」データマップ内の変数「foo」というように評価される見込みはなく、そうではない。私が知ることができたのは、 "キー"の一重引用符はオプションなので、変数を残しても変数が評価されないということです。

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

私は困惑:

は、私はまた、運の量と笑いのために次のことを試してみました。私が自分の人生で乗り越えることができるように、あなたが提供することができるどんな助けでも、まさに「いいえ」ということに感謝します。 :)

答えて

2

これは一つの可能​​な答えです。

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

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

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

// Result 
fooVar = barVar 
fooString = barString  

これはインラインで行うことができますか(私は元の例のように)、あらかじめ地図を作成しておくのは興味があります。

4

JavaScriptの「マップ」(オブジェクト)は、キーを評価しません。あなたが鍵を評価する必要がある場合は、そのようにそれを行うことができます。このインラインを構造化する方法を存在がない場合でも

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

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

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

(あなたがhereの希望として)、あなたは何をやって方がいいでしょうあなたは事前にオブジェクトを構築することにより、後にしている - あなたは、単一の式でそれを行う上で設定している場合は、以下の(未テスト)のようなヘルパー関数を書くことができthis Encosia article

-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ページを参照)。

関連する問題