Получение переменной Javascript для использования в Perl

0

У меня есть 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"

  • 0
    вам нужно установить URL: посмотрите документацию здесь
  • 0
    Его для той же страницы, хотя. Я думал, что вы можете оставить URL-адрес пустым, если это та же страница

1 ответ

0
Лучший ответ

В вашем подходе нет ничего принципиально неправильного, но вы не $.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');

Если вы пытаетесь установить значение, вам нужен второй параметр. Если вы пытаетесь получить значение, вы должны, вероятно, назначить его чему-то.

  • 0
    Я где-то читал, что вам не нужно указывать URL, если они находятся на одной странице. Это ложно?
  • 0
    Ах, нет, это правда. Я не обязательно думаю, что это отличная идея, но она будет работать. Конечно, тогда вам нужно будет, чтобы код на стороне сервера различал запросы GET и POST .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню