У меня есть html-таблица с чем-то вроде этого:
<table class="notices-table" width="100%" cellpadding="0" cellspacing="0" border="0">
<% foreach my $notice (@regular_posts) { %>
<form method = "post" id = "post-form-<%= $notice->notice_id()%>">
<tr class = "click-post" href = "<%= $notice->link() %>">
<td><b>Date Posted: </b> <%= '' . (split(/\./, $notice->created()))[0] %><br/>
<b>Title: </b><%= $notice->title() %><br/><br/>
<%= $notice->content() %>
</td>
<td><button class = "archive-button" id="archive-button">Archive</button></td>
</tr>
<input type="hidden" id="action" name="action" value="archive" />
</form>
<% } %>
</table>
а затем у меня есть код javascript, который запускается, когда нажимается кнопка "архив" для каждого, кто пытается получить "notice_id":
$(document).ready(function() {
$('button.archive-button').bind('click', function() {
var id = $(this).attr('id');
var parts = id.split(/-/);
var notice_id = parts[2];
var post_form_id = '#post-form-' + notice_id;
$(post_form_id).submit();
var path_name = window.location.pathname;
$.ajax(path_name, {
type: 'POST'
data: {
'notice_id2' : notice_id
},
success: function(data) {
console.log('/takeNotice called successfully:');
console.log(data);
},
error: function(jqXHR, textStatus, err) {
console.error('/takeNotice call failed:');
console.error(err);
}
});
return false;
});
});
Я хочу передать "notice_id" в Perl-скрипт, который будет использовать идентификатор для получения правильной записи из базы данных, чтобы он ее архивировал:
my $cgi = CGI->new;
my $notice_id = $cgi->param("notice_id2");
my $form = $Request->Params();
my $notice;
eval {
$notice = Taskman::Notice->new(notice_id => $notice_id);
};
Я новичок в Perl и Javascript/Ajax, поэтому у меня, наверное, больше проблем. Любое понимание было бы здорово. благодаря
EDITED Я внес некоторые изменения в свой код. Кажется, что Ajax работает, но я не могу сказать, правильно ли я его использую или нет. Сценарии находятся на одной странице. Я все еще получаю неправильное "notice_id"
В вашем подходе нет ничего принципиально неправильного, но вы не $.ajax
корректно $.ajax
, что не позволит чему-либо работать.
В частности, вы не предоставляете URL-адрес для своего Perl-скрипта. Для примера, я предположим, что ваш скрипт Perl живет на пути /takeNotice
(умный, нет?). Вы бы назвали это так:
$.ajax('/takeNotice', {
type: 'POST',
data: {
notice_id2 : notice_id
},
success: function(data) {
console.log('/takeNotice called successfully:');
console.log(data);
},
error: function(jqXHR, textStatus, err) {
console.error('/takeNotice call failed:');
console.error(err);
}
});
Функции success
и error
не являются строго необходимыми, но это хорошая идея, чтобы включить их, и, конечно же, когда вы учитесь, это действительно помогает понять поток вашей интерфейсной логики.
Кстати, вы, вероятно, также должны добавить некоторые ошибки обработки этого кода:
var parts = id.split(/-/);
var notice_id = parts[2];
var post_form_id = '#post-form-' + notice_id;
Если идентификатор не в том формате, который вы ожидаете, вы получите сообщение post_form_id
из "#post-form-undefined
. Некоторая обработка ошибок и ведение журнала консоли были бы полезны здесь.
Наконец, эта строка ничего не делает:
$(post_form_id '#action').val('archive');
Если вы пытаетесь установить значение, вам нужен второй параметр. Если вы пытаетесь получить значение, вы должны, вероятно, назначить его чему-то.
GET
и POST
.