Доброе время суток уважаемые форумчани.
Уже третюю неделю бьюсь над задачей, а ответ так и не найден. может кто поможет.
Задача следующая: есть сервер apache на нем активирован модуль mod_cgi.so
Для папки /usr/lib/cgi-bin/ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>cgi скрипт написан на С с использованием библиотеки jansson
/*
* main.c
*
* Created on: 25 жовт. 2013
* Author: vad
*/
#include <stdio.h>
#include <stdlib.h>
#include <jansson.h>
#include <string.h>
int main (int argc, char* argv[])
{
char* message="Error";
json_t * obj=json_object();
char *data;
int v2=12;
json_t * value;
json_t * value2 =json_integer(v2);
if ((data=getenv("QUERY_STRING"))==NULL) {
if ((value = json_string("Error"))==NULL)
printf("json_string() error\n");}
else
value = json_string(data);
json_object_set_new(obj,"getstring",value);
json_object_set(obj,"integer",value2);
printf("Content-Type: application/json \n\n");//,13,10);
printf("%s",json_dumps(obj,0));
return 0;
}вебстраничка для тестирования даного скрипта использует библиотеку JQUERY
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test ajax</title>
<script src="js_lib/jquery-1.10.2.js"></script>
<script type="text/javascript">
$(function() {
$.getJSON("http://localhost/cgi-bin/json_generate.cgi",
function (data) {
var items = [];
items.push("<table border=1>");
$.each( data, function (key, value) {
items.push("<tr><td>" + key + "</td><td>" + value + "</td></tr>");
});
items.push("</table>");
$("#testdiv").html(items.join(""));
//$("table#table").html(items.join(""));
});
});
</script
</head>
<body>
<div id="testdiv"></div>
</body>
</html>а теперь самое интересное при запуске откомпилированого скрипта в консоли сервера выводиться все как положено
root@nachlab:/usr/lib/cgi-bin# ./json_generate.cgi
Content-Type: application/json{"integer": 12, "getstring": "Error"}
однако при запуске страницы в Firebug ответ на AJAX запрос
{"integer": 12, "getstring": ""}
почему не могу понять. подскажите.
Очевидно data=getenv("QUERY_STRING") != NULL
> Очевидно data=getenv("QUERY_STRING") != NULLКогда я передаю в $.getJSON вторым параметром строку "{test:test}" (к примеру) то отрабатует передача этой строки назад в формате JSON. Сама проблема в том что не передаеться строка при отсутствия QUERY_STRING. Обращаю внимание на то, что в stdout отрабатует правильно, а вот пройдя через apache эта строка теряеться.
Если ты не передаёшь параметры, то data=getenv("QUERY_STRING") != NULL и при этом data=""Если хочешь получить Error, то нужно проверять и на пустоту
if ((data=getenv("QUERY_STRING"))==NULL) {
if ((value = json_string("Error"))==NULL)
printf("json_string() error\n");}
else {
if (strlen(data))
value = json_string(data);
else
value = json_string("Empty string")}
>[оверквотинг удален]
> Если хочешь получить Error, то нужно проверять и на пустоту
> if ((data=getenv("QUERY_STRING"))==NULL) {
> if ((value = json_string("Error"))==NULL)
> printf("json_string() error\n");}
> else {
> if (strlen(data))
> value = json_string(data);
> else
> value = json_string("Empty string")
>}я попробую. Спасибо