我有C功能。从html页面,通过ajaxcall传递请求并获得响应。
如果我执行点击提交按钮等操作,则会执行一些操作。重定向后如何返回相同的html页面?
我可以设置自动将我重定向到该页面的环境变量吗?
编辑:从下面的“回答”中添加更多详细信息
谢谢你。
由于我是新手,我无法得到它。如果我们使用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
}
如何从C返回同一页面?如何给标题(“Location:”。$ url);在C ??
答案 0 :(得分:2)
严格地说,这与cgi和c无关,但无论如何。
您有几个选项,我想最好将当前页面设为<input type="hidden" name="currentPage" value="/my/current/page"/>
,这样您就可以在表单提交中将其作为变量获取,并且您可以将其重定向回脚本中的页面,在您的回复中添加Location:
标题(或通过其他方式,例如确认页面上的链接和http刷新元标记,或者您正在做的任何事情)。
修改的
有提到的引用者,但这可能会或可能不会设置(我想有一些'隐私'插件,用于删除引用者标题的浏览器。)
现在有了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脚本并直接转到网址,这不是你想要的。
答案 1 :(得分: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是否为有效的环境变量。
答案 2 :(得分:0)
您的问题还不清楚,但如果我理解正确:向用户提供看起来的内容,就像提交按钮一样,但实际上只是执行您的AJAX操作。您将保持在同一个HTML页面上,从服务器返回您的返回,并以适当的方式更改页面。