Как я могу отправить ответ JSON из программы Perl CGI?

Я пишу ответ в формате JSON от программы perl / cgi. Тип содержимого заголовка должен быть «application / json». Но, похоже, он не распознается, поскольку ответ выдается в виде текстового файла.

Я бы собирал ответ, используя JSON-библиотеку jQuery. Где мне не хватает при отправке ответа JSON.

Как вы отправляете ответ? Вы используете CGI.pm?

Paul Tomblin 12.01.2009 16:50

Да. Я получил его, используя третий ответ. В любом случае спасибо

Rakesh 12.01.2009 18:07

Затем вы должны принять третий ответ (щелкните галочку).

Mr. Muskrat 12.01.2009 18:23

Часто бывает полезен пример кода, показывающий то, что вы уже пробовали. :)

brian d foy 12.01.2009 22:00

Есть третий ответ?

Horatio Alderaan 14.01.2009 01:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
20
5
46 545
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Даже если вы укажете тип «application / json», вам все равно нужно будет разобрать текст. jQuery сделает это за вас, используя функцию $ .getJSON, то есть:

$.getJSON("http://someurl.com/blabla.json",{some: "info"},function(json){
  alert(json["aKey"]["anotherOne"]);
});

(здесь спецификации).

Но, возможно, вы уже знаете об этом, поэтому проблема находится в другом месте: не могли бы вы рассказать нам образец вашего ответа json, потому что, возможно, проблема в том, что он недействителен. Мне не совсем понятно, почему вы говорите, что «похоже, не распознается»: когда я пишу json-сервисы, первый тест, который я делаю, - это вызвать их в браузере и, возможно, запустить firebug и попытаться его проанализировать (так что да, ответ это текстовый ответ, но javascript по-прежнему рад его проанализировать и вернуть объект json).

Ответ принят как подходящий

Я делаю это в программе perl / cgi.

Я использую их в верхней части своего кода:

use CGI qw(:standard);
use JSON;

Затем я печатаю заголовок json:

print header('application/json');

который является типом контента:

Content-Type: application/json

А потом распечатываю JSON вот так:

my $json->{"entries"} = \@entries;
my $json_text = to_json($json);
print $json_text;

Мой вызов javascript / обрабатывает это так:

   $.ajax({
        type: 'GET',
        url: 'myscript.pl',
        dataType: 'json',
        data: { action: "request", last_ts: lastTimestamp },
        success: function(data){
            lastTs = data.last_mod;
            for (var entryNumber in data.entries) {
                 //Do stuff here
            }
        },
        error: function(){
            alert("Handle Errors here");
        },
        complete: function() {
        }
    });

Вам не обязательно использовать библиотеку JSON, если вы не хотите ее устанавливать, вы можете печатать прямой текст в формате JSON, но это упрощает преобразование объектов perl в prety JSON.

У меня были ошибки в моем JSON. Большое спасибо, это сработало как шарм

Rakesh 12.01.2009 17:38

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

Neil 21.01.2010 20:19

Вот как сгенерировать запрос в Мейсон, веб-фреймворке для Perl.

Mason аналогичен Pylons или Ruby On Rails.

<%init>

use JSON;

my %hash = { a => 'a', b => 'b' };
my @list = ( 1, 2, \%hash );

# Mason object $r for Apache requests, automatically sets the header
$r->content_type('application/json');

# Pass a reference to anything (list, hash, scalar) for JSON to encode
my $json = new JSON;
print $json->encode(\@list);

</%init>

А затем обработайте это в Опытный образец, веб-абстракции JavaScript:

var req = new Ajax.Request('request.html', {
    method: 'get',
    parameters: {
        whatever: 'whatever'
    },
    onCreate: function() {
        // Whatever
    },
    onSuccess: function(response) {
        // This only works if you set the 'application/json' header properly
        var json = response.responseJSON;

        // Since you sent a list as the top-level thing in the JSON,
        // then iterate through each item
        json.each(function(item) {
            if (item instanceof Object) {
                item = new Hash(item);
            } else if (item instanceof Array) {
                // Do array stuff
            } else {
                // Do scalar stuff
            }
        });
    },
    onFailure: function() {
        // Failed
    }
});

Другие вопросы по теме