2009-12-09 4 views
1

У меня есть функция C. На странице html через ajaxcall передается запрос и получен ответ.Как вернуться на ту же страницу html с помощью cgi?

Если я выполняю какое-либо действие, например кнопку «Отправить кнопку», тогда будет выполнено какое-то действие. Как вернуться к той же странице html после перенаправления?

Могу ли я установить переменную окружения, которая автоматически перенаправляет меня на эту страницу?


EDIT: Добавление большего количества деталей от 'ответа' ниже

Спасибо Роу.

Поскольку я новичок в этом, я не могу его получить. Если мы используем php, тогда я могу получить URL-адрес и поместить его в заголовок («Location:». $ Url).

Но у меня есть только функции C.

HTML код


function x(id) 
{ 
    var val; 
    var URL = window.location.href; 
    if(id =="y") 
    { 
     val=1; 
     document.location = "http://ipaddr/cgi-bin/file.cgi?value="+val+"&url="+URL; 
    } 
} 

C Код


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
    printf("Content-type: text/html; charset=utf-8\n\n"); 

    char* data = getenv("QUERY_STRING"); 
     //process 
} 

Как вернуть из С в одной и той же странице? Как указать заголовок («Местоположение:». $ Url); в C ??

+0

Вы говорите о перенаправлении после вызова ajax или перенаправлении в результате отправки формы? – falstro

+0

перенаправление в результате отправки кнопки из файла .cgi – MalarN

ответ

1

Обращающаяся страница задается переменной окружения HTTP_REFERER. Вы можете вернуться к той же странице, с которой вы пришли, используя страницу редиректа, как следующее:

const char * redirect_page_format = 
"<html>\n" 
"<head>\n" 
"<meta http-equiv=\"REFRESH\"\n" 
"content=\"0;url=%s\">\n" 
"</head>\n" 
"</html>\n"; 
printf (redirect_page_format, getenv (HTTP_REFERER)); 

В идеале вы должны проверить, что HTTP_REFERER является действительной переменной окружения, прежде чем делать это.

+0

Спасибо Кинопико. Это сработало хорошо. – MalarN

+1

Whoa, HTTP_REFERER - это фактическое (неверное) правописание. Первоначально ошибка программиста, она была установлена ​​в камне - см. Http://en.wikipedia.org/wiki/HTTP_referer (чтобы спасти других педантов от исследования). – JDonner

0

Ваш вопрос довольно неясен, но если я правильно вас понимаю: представить пользователю что-то, что выглядит как кнопка отправки, но на самом деле просто выполняет вашу операцию AJAX. Вы остаетесь на той же странице HTML, возвращаете свое возвращение с сервера и изменяете страницу любым способом.

+0

Нет, Ajaxcall - это отдельный, который будет давать запрос и получать ответ периодически. Я должен принять некоторые пользовательские ввод и выполнить некоторую операцию при нажатии кнопки отправки. После щелчка, он переходит в файл file.cgi. Как вернуться на ту же страницу? Если я нажму, я получу ошибку внутреннего сервера. – MalarN

2

Строго говоря, это не имеет никакого отношения ни к cgi, ни к, но в любом случае.

У вас есть несколько вариантов, я полагаю, лучше всего разместить текущую страницу как <input type="hidden" name="currentPage" value="/my/current/page"/>, таким образом вы получите ее в форме отправки в качестве переменной, и вы можете перенаправить обратно на эту страницу с вашего сценарий, поместив заголовок Location: в ваш ответ (или другими способами, такими как ссылка и метатег http-refresh на странице подтверждения или что бы вы ни делали).

EDIT
Там в ссылающейся как уже упоминалось, но это может или не может быть установлен (я предполагаю, что есть «Приватность» плагины для браузеров, снимающими заголовок реферера).

Теперь есть опция обновления http-equiv, которая подробно описана в другом ответе, поэтому я покажу вам стиль Location-header. И это на самом деле cgi. :) В протоколе CGI говорится, что вы должны начать свой вывод с заголовка (если вы не выполняете NPH-CGI, но если да, то, надеюсь, вы знаете, что вы делаете), за которым следует пустая строка. Проще говоря это как ваш заголовок:

printf ("Status: 302 Moved Temporarily\r\n"); 
printf ("Location: %s\r\n", url); 
printf ("\r\n"); /* end of header */ 

Вам нужно разобрать строку запроса (в случае запроса GET, в противном случае разобрать STDIN, но это немного сложнее) и извлечь URL.Вы можете делать любые виды обработки, которые вам нравятся, хотя имейте в виду, что любые выводимые вами данные, скорее всего, никогда не будут отображаться для пользователя (в отличие от обновления http-equiv, вероятно, заставит браузер мигать содержимое, пустое или нет , прежде чем перейти к следующей странице).

301s (перемещается навсегда) кэшируются, и браузер может обойти ваш скрипт cgi в следующий раз и напрямую перейти к URL-адресу, который вам не нужен.

+0

Я дал фрагмент кода. Помогите мне в этом. – MalarN

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