2012-05-17 18 views
2

在我工作的應用程序中,服務器頁面用於接收輸入的名稱作爲其值的鍵。是可以做到這一點與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) 
     } 
    }); 
}); 
+0

嘗試數據:{p_session_id:$(「[name ='p_session_id']」)。val(),p_username:$(「[name ='p_username']」)。val(),(thisName):thisValue} ,即'(thisName):thisValue' – Imdad

回答

1

不幸的是,內部的對象初始化劑的:的左側的部分不作爲一個變量,但作爲一個字符串處理,所以the_key被視爲相同"the_key"

這是最簡單的方法我能想到的與動態的名字添加屬性:

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

然後在你的$.ajax調用中使用fields作爲data: fields

0

也許不是很優雅,但:

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