The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"CGI + JQUERY"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (JavaScript)
Изначальное сообщение [ Отслеживать ]

"CGI + JQUERY"  +/
Сообщение от vad.exe (ok) on 06-Дек-13, 19:22 
Доброе время суток уважаемые форумчани.
Уже третюю неделю бьюсь над задачей, а ответ так и не найден. может кто поможет.
Задача следующая: есть сервер 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": ""}
почему не могу понять. подскажите.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "CGI + JQUERY"  +/
Сообщение от hizel (ok) on 06-Дек-13, 23:00 
Очевидно data=getenv("QUERY_STRING") != NULL
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "CGI + JQUERY"  +/
Сообщение от vad.exe (ok) on 07-Дек-13, 09:45 
> Очевидно data=getenv("QUERY_STRING") != NULL

Когда я передаю в $.getJSON вторым параметром строку "{test:test}" (к примеру) то отрабатует передача этой строки назад в формате JSON. Сама проблема в том что не передаеться строка при отсутствия QUERY_STRING. Обращаю внимание на то, что в stdout отрабатует правильно, а вот пройдя через apache эта строка теряеться.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "CGI + JQUERY"  +/
Сообщение от Аноним (??) on 10-Дек-13, 17:04 
Если ты не передаёшь параметры, то 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")

}

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "CGI + JQUERY"  +/
Сообщение от vad.exe (ok) on 11-Дек-13, 10:04 
>[оверквотинг удален]
> Если хочешь получить 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")
>}

я попробую. Спасибо

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру