Это работает, только если у вас более одной формы. Если есть только одна форма, которую вы пытаетесь использовать $(this)
без цикла each
, то this
будет window
объектом.
Кроме того, использование $(this)
внутри обратного вызова не работает, потому что обратный вызов выполняется позже, вне области действия цикла. Сохраните ссылку на форму в локальной переменной, чтобы она была включена в замыкание для функции обратного вызова.
Вы можете просто зациклить, даже если есть только одна форма:
$('.common_form_class').each(function() {
var frm = $(this);
$.getJSON("/token.php?key=" + frm.attr('id'), function(data){
frm.append('<input type="hidden" class="token" name="token" value="'+data.token+'" />');
});
});
Или лучше использовать jQuery:
$('.common_form_class').each(function(i, frm) {
$.getJSON("/token.php", { key: frm.attr('id') }, function(data){
frm.append($('<input/>', { type: 'hidden', 'class': 'token', name: 'token' }).val(data.token));
});
});
Примечание. Используя метод val
для установки значения вместо его конкатенации в HTML-коде, вам не нужно беспокоиться о символах, которые могут нарушить HTML-код.