Как создать Perl API для передачи данных обратно в запрос angularjs $ http?

0

Я использую угловые 1.5.7 и perl 5.16.2. У меня нет возможности использовать внешние библиотеки или инструменты переключения - я застрял, просто используя то, что включено в эти два.

Угловой контроллер выполняет вызовы в файл perl. Я могу успешно выполнить POST-запросы, и мои запросы GET возвращают статус 200, но не показывают данные, которые я ожидаю увидеть. Сейчас я просто работаю с простым примером, чтобы попытаться сузиться там, где все идет не так, и я думаю, что просто не знаю формата для возврата значений из файла perl.

Мой метод GET контроллера выглядит так:

    $http({
        method : "GET",
        url : "filename.pl",
        params:{}
    }).then(function successCallback(response) {
        console.log(response.records);
    }, function errorCallback(response) {
        console.log(response);
    });

и код perl, вызываемый в filename.pl, это:

    my $string = q{{"records":{"2":{"City":"MÃxico D.F.","Country":"Mexico","Name":"Ana Trujillo Emparedados y helados"},"1":{"Name":"Alfreds Futterkiste","Country":"Germany","City":"Berlin"}}}};

     return $string;

Строка - это просто фиктивная переменная, чтобы увидеть, работает ли работа над передачей - это не будут окончательные данные. Я подтвердил, что это действительно JSON. Вот как выглядит ответ с сервера:

 {"data":"","status":200,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"url":"glwizardutils.esp","params":{"FUNCTION":"initcheckboxes","CONTEXTID":"432"},"headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"OK"}

Поле данных полностью пустое, и поле ответа не работает вообще. Я могу проверить, что он ударил файл perl - как я уже сказал, POST-запросы работают нормально, и я включил некоторые распечатки, которые проверяют его правильным методом, но он просто ничего не возвращает. Что я должен здесь делать, чтобы заставить это работать?

  • 1
    Пожалуйста, покажите остальную часть вашего Perl-кода. То, что вы пока что показали, недостаточно для диагностики проблемы.
  • 0
    Проверьте API PERL из командной строки, используя curl, и попытайтесь без специальных символов в City, чтобы увидеть, есть ли какая-то проблема с кодировкой при попытке JSON.parse данных.
Теги:

1 ответ

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

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

print "HTTP/1.1 200 OK\n";
print "Content-type: application/json\n";
print "\n";

my $string = q{{"records":{"2":{"City":"MÃxico ..."}}}};
print $string;

В Perl и практически на любом другом языке существует несколько фреймворков и модулей для обработки повторяющихся аспектов написания правильного ответа, который вы хотите изучить, поскольку ваш скрипт на стороне сервера Perl становится более требовательным.

  • 0
    Это решило мою проблему, спасибо!

Ещё вопросы

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