2013-05-14 2 views
0

Я делаю небольшой проект, который использует jQuery, AJAX, JSON и Perl. На бэкэнд я использую Perl и его модуль CGI, чтобы вернуть JSON ojbect.Почему я не могу вернуть объект json из Perl-скрипта?

#!/usr/software/bin/perl5.8.8 

use strict; 
use warnings; 
use CGI qw(:standard); 
use JSON; 

print header('application/json'); 
my $json; 
# eventually the json that will be returned will based on params, 
# for now using this list as example. 
$json->{"entries"} = [qw(green blue yellow red pink)]; 
my $json_text = to_json($json); 
print $json_text; 

Я был в состоянии написать выше сценарий, с помощью How can I send a JSON response from a Perl CGI program?

Этот скрипт вызывается с помощью GET JQuery в:

jQuery.getJSON("script.pl?something=whatever", function(data, status) { 
    console.log(data); 
    console.log(status); 
},"json").error(function(jqXhr, textStatus, error) { 
    /* I am always ending up here. */ 
    console.log(jqXhr); 
    console.log("ERROR: " + textStatus + ", " + error); 
}); 

Из сказанного выше JQuery вызов, я ожидал вернуть объект JSON, но вместо этого я получаю весь скрипт Perl. Я знаю, что мой тип содержимого установлен правильно, потому что я получаю это назад, когда я выполнить скрипт из командной строки:

Content-Type: application/json 

Может кто-то пожалуйста, помогите мне понять это. Спасибо.

+2

Это проблема конфигурации с вашим веб-сервером. Он должен быть настроен для запуска вашего Perl-скрипта как CGI. Какой сервер вы используете? – friedo

+0

Как совет, вы должны сначала протестировать службы JSON, напрямую обратившись к URL-адресу из браузера, прежде чем использовать их в вызовах AJAX. Жизнь (или, по крайней мере, отладка) проще: – DVK

ответ

4

вместо этого я получить весь сценарий PERL

Сервер не работает скрипт на Perl, он обслуживает его как обычный текст.

Вам необходимо прочитать руководство для своего сервера, чтобы узнать, как его настроить для CGI.

0

Как указывалось другими, вам необходимо настроить веб-сервер для запуска Perl-скрипта как CGI. Если ваш веб-сервер Apache, и ваш CGI называется «json.cgi», то нужно добавить следующую строку в ваш httpd.conf:

AddHandler CGI-скрипт .cgi

Поскольку вы с помощью JQuery, то вы должны прочитать этот небольшой самородок из стручка JSON, под заголовком to_json:

If you want to write a modern perl code which communicates to outer 
    world, you should use "encode_json" (supposed that JSON data are 
    encoded in UTF-8). 

используйте «perldoc JSON» для остальную часть истории.

Смежные вопросы