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

Я столкнулся с той же ошибкой. JAVA_HOME указывает на правильную версию JDK. Обновлены все библиотеки поддержки и инструменты сборки. По-прежнему стояла одна и та же проблема.

Я использую аннотации Android в своем проекте. Я добавил новый View .., и в файле Java уже есть существующее представление с тем же именем. Когда я запускаю проект, вместо того, чтобы указывать, что представление уже существует, я получал указанную выше ошибку.

Проверьте ваши ошибки в java-файлах, если другие решения не работают.

20
задан brian d foy 12 January 2009 в 18:59
поделиться

3 ответа

Я делаю это в 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, но она делает объекты жемчуга преобразования к JSON довольно легкими.

28
ответ дан 30 November 2019 в 00:35
поделиться

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

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

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

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

1
ответ дан 30 November 2019 в 00:35
поделиться

GC отслеживает, какие объекты могут по-прежнему ссылаться позже в коде. Затем, через промежутки времени, проверяет, есть ли какие-либо объекты, которые еще живы, которые не могли быть ссылаться в позже в коде и очистить их.

Механика этого являются несколько сложными, и когда эти коллекции произойдут, зависит от различных факторов. GC предназначен для выполнения этих коллекций в наиболее оптимальное время (что он может установить), и поэтому, хотя можно заставить его сделать коллекцию, это почти всегда плохое представление.

Установка переменной к NULL будет иметь очень мало общего влияния на то, как скоро справится объект. Хотя он может, в некоторых небольших угловых случаях, оказывайтесь на пользу, не стоит мутать кода с резервными заданиями, которые не повлияют на производительность ваших кодов и только для чтения нанесения вреда.

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

-121--3545717-

HG Revert действительно решает эту проблему. Но я думаю, что вы смущены более широким кругом вещей, чем просто ответ на ваш вопрос и хотите попытаться ответить более полно.

HG Update - это целая команда репозитория и не будет работать на отдельных файлах. Это в отличие от Subversion Обновление SVN таким образом. Если вы сделаете HG - HELP Обновление Вы можете увидеть, что это так, потому что команда не принимает аргумент файла. Его можно использовать для перемещения всего репозитория на определенный снимок, но не может быть использован для этого только с одним файлом.

Если вы напечатаете HG --help Вы видите список команд. Это довольно большой и несколько сложный список, но если вы прочитаете его, вы найдете эту строку:

revert       restore individual files or directories to an earlier state

Теперь, если вы просто хотите, чтобы последнее состояние для сравнения, есть другая команда, которую вы можете заинтересовать, и Это HG Cat . Это позволит вам распечатать содержимое файла при любой конкретной ревизии. Затем вы можете перенаправить его вывод в какой-то другой файл. Тогда вы можете получить предыдущую известную хорошую версию вашего файла и старую версию для сравнения бок о бок.

Причина, по которой Mercurial имеет отдельное обновление Команда , состоит в том, что можно что-то сделать в Mercurial, что невозможно в Subversion. Вы можете обновление на более раннюю версию, вносить изменения, затем совершать. Это создаст ветку. Команда UPDATE имеет эффект также изменения родительского пересмотра текущего рабочего каталога, а также изменение содержимого всех файлов в этом каталоге до версий редакции родителей.

Это означает REVERT изменяет содержимое файла (или даже всего репозитория, если вы дадите команду правильные аргументы), но оставляет родительскую пересмотр текущей рабочей копии то же самое.

Вы можете узнать родительскую ревизию (или изменения в случае слияния) текущей рабочей копии с помощью команды HG Routems .

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

-121--717895-

Вот как генерировать запрос в Mason , веб-каркас для PERL.

Мейсон аналогичен пилонам или рубиному на рельсах.

<%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 Web Anstration:

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
    }
});
1
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: