2012-05-17 3 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; 

Затем использовать fields в вашем $.ajax вызова в 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

Смежные вопросы