Подтвердить что ты не робот

Как вы делаете динамический ключ данных ajax в jquery?

Я пытаюсь сделать мое встроенное редактирование динамичным, поэтому оно будет зависеть только от некоторых атрибутов данных от моей разметки, поэтому здесь код:

$(".inline-edit").editable(
  function(value, settings) {
    var editableField = $(this);

    $.ajax({
          type: 'PUT',
          url: editableField.attr('data-href'),
          dataType: 'html',
          success: function(html) {
            editableField.parents('.replaceable').replaceWith(html);
          },
          data: { 'regression_test_environment[name]' : value }
        });
        return(value);
  },
  {
    event: 'click',
    width: '80%',
    height: '20',
    submit : 'OK'
  }
)

Я хочу, чтобы имя в regression_test_environment [name] было editableField.attr('data-column-name'), но оно всегда терпит неудачу при компиляции, потому что он продолжает брать ключ в виде строки. Я попытался сделать переменную после редактирования изменяемой переменной поля и построить строку как другую переменную, но она не хочет оценивать ключ как функцию.

Есть ли способ сделать это? или я застрял в создании отдельного целевого вызова для каждого из моих редактируемых полей?

4b9b3361

Ответ 1

Вы можете попробовать следующее:

var name = editableField.data('column-name');
var values = { };
values['regression_test_environment[' + name + ']'] = value;

$.ajax({
    type: 'PUT',
    url: editableField.data('href'),
    dataType: 'html',
    data: values,
    success: function(html) {
        editableField.parents('.replaceable').replaceWith(html);
    }
});

Ответ 2

Лучше, менее запутанный ответ:

var data = {};
data[thisField] = $(this).text();

$.ajax({
    data: data
});

Ответ 3

Лучше всего передавать динамические значения, сериализируя его:

    var data = $('#formid').serialize(); // serialize all the data in the form 
    $.ajax({
    url: 'test.php', // PHP скрипт to retern json encoded string
    data: data,  // serialized data to send on server
    ...
    });