Как вернуть успех после запуска скрипта

#javascript #jquery #ajax #perl

#javascript #jquery #ajax #perl

Вопрос:

Я действительно новичок как в Perl, так и в Ajax, и мне было интересно, как мне вернуть сообщение для ajax, чтобы узнать, успешно ли запущен скрипт, и запустить сценарий успеха, узнав, что сценарий perl был успешным.

На моей главной HTML-странице у меня есть ajax-скрипт, подобный этому:

 $(document).on('click', '.archive-button', function(){
    var notice_id = $(this).data('notice_id');
    var archiveaddress = '/user/notices/archivenotice/'   notice_id;
    $.post(archiveaddress, {notice_id: notice_id});
});
 

которые отправляют его в archivenotice.html страница, на которой запускается Perl-скрипт, который просто отмечает время прочтения уведомления.

 my $update_needed = 0;
unless ($notice->read_on()) {
    $notice->read_on(scalar localtime);
    $update_needed = 1;
}
 

Что я должен добавить в сценарий Perl на archivenotice.html страницы, чтобы ajax на моей главной HTML-странице знал, что скрипт успешно запущен, и инициировал другой скрипт с именем «successful».

Комментарии:

1. В вашем Perl-скрипте просто print все, что вы хотите отправить обратно в jQuery .post . Затем возьмите эту информацию в своем .post методе «success».

2. Извините, я очень визуальный человек. Не могли бы вы показать мне пример?

3. В дополнение к тому, что сказал @bloodyKnuckles, в конце вашего perl-скрипта сделайте что-то вроде print "Content-type: text/plainnn"; print qq{"status":"success","updateNeeded":"$update_needed"}; , чтобы вы могли получить конкретный ответ от perl

Ответ №1:

Откройте канал связи между вашим main.html скрипт page и archivenotice на Perl.

main.html

 $(document).on('click', '.archive-button', function(){
    var notice_id = $(this).data('notice_id');
    var archiveaddress = '/user/notices/archivenotice/'   notice_id;
    $.post(archiveaddress, {notice_id: notice_id}, function( data ) {
        if ( data ) { alert('Update needed!'); }
        else { alert('Update not needed.'); }
    });
});
 

archivenotice

 my $update_needed = 0;
unless ($notice->read_on()) {
    $notice->read_on(scalar localtime);
    $update_needed = 1;
}
print "Content-type: text/plainnn";
print $update_needed;
exit;
 

Комментарии:

1. Тип содержимого всегда должен быть включен

2. Хороший звонок. 🙂 Обновлено.

Ответ №2:

Попробуйте это:

 $(document).on('click', '.archive-button', function(){
   var notice_id = $(this).data('notice_id');
   var archiveaddress = '/user/notices/archivenotice/'   notice_id;
   $.post(archiveaddress, {notice_id: notice_id}).done(function() {
      alert( "update success" );
   });
});
 

Комментарии:

1. Это не определяет, был ли Perl действительно успешным, просто если AJAX успешно завершил цикл.