如何在 C 语言中建立 JavaScript 和 CGI 之间的通信通道
How to establish communication channel between javascript and cgi in C?
如何让 JavaScript 与 C 语言中的 cgi 脚本通信?例如尝试将递增的 int 值从 CGI 发送到 JavaScript 并在浏览器中显示。在客户端是隐藏的iframe,带有cgi脚本的get方法:
<<html><head><title>Javascript cgi</title>
<style type="text/css">
#hiddenframe { display:none; }
</style>
<script type="text/javascript">
var value = 0;
function init() {
document.getElementById('thevalue').innerHTML = value;
setInterval("get_value()", 1000);
}
function get_value() {
value = thescript.value;
document.getElementById('thevalue').innerHTML = value;
thescript.location.href = 'http://localhost/homecgi/cgi.exe';
}
onload = init;
</script>
</head>
<body>
<div id="hiddenframe">
<iframe src="http://localhost/homecgi/cgi.exe" name="thescript"></iframe>
</div>
<div id="thevalue"></div>
</body>
</html>
在 C 语言中的服务器端 cgi:
int main()
{
int j=100;
char *data_get;
char *method;
printf("%s%c%c'n", "Content-Type:text/html;charset=iso-8859-1",13,10);
printf(" <html><title>hello</title><body> 'n");
method = getenv("REQUEST_METHOD");
data_get = getenv("QUERY_STRING");
if( !strcmp(method, "GET") ){
printf("<br>Method %s'n", method);
printf("<br> data_get %s'n", data_get);
printf("<script>");
printf(" var value = %d ", j++);
printf("</script>");
}
else if(!strcmp(getenv("REQUEST_METHOD"), "POST")){
}
printf("<p><a href=http://localhost/homecgi/index.html >Back</a> </p>");
printf(" </body></html>");
return 0;
}
这样只有 j=100 在打印。如何每个递增的值j在CGI中发送到JavaScript并将其打印在屏幕上?如何建立在 C 语言中 JavaScript 和 CGI 之间的通信通道?
我用ajax和php尝试了一些东西。这是 XHR 的客户端:
<html>
<head>
<script>
var response;
</script>
</head>
<body>
<p id="demo"></p>
<input type="button" onclick="sendRequest()" value="String"> <br>
<script>
function sendRequest() {
var http = createRequestObject();
http.open("GET", "phptoajax.php?p=");
http.onreadystatechange = function () { handleResponse(http); };
http.send(null);
}
function createRequestObject() {
var http;
if (navigator.appName == "Microsoft Internet Explorer") {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
http = new XMLHttpRequest();
}
return http;
}
function handleResponse(http) {
if (http.readyState == 4) {
response = http.responseText;
document.getElementById("demo").innerHTML = response + "<br>";
}
}
</script>
</body>
</html>
向 php 发送一些东西。然后 php 返回字符串 Hello World:
<?php
$j = $_GET["p"];
$j = $j . " Hello World";
echo $j ;
?>
只有回显字符串值$j,http.responseText 才能得到这个值返回,客户端将"Hello World"打印到浏览器。它有效。
但是当在 cgi 中尝试这个时,我卡住了。在客户端必须更改为CGI脚本:
http.open("GET", "cgi.exe?p=");
CGI C:
int main()
{
char *data_get;
char *string = "Hello World";
printf("%s%c%c'n", "Content-Type:text/html;charset=iso-8859-1",13,10);
printf(" <html><title>hello</title><body> 'n");
data_get = getenv("QUERY_STRING");
if( !strcmp(getenv("REQUEST_METHOD"), "GET") ){
// printf("<br> data_get: %s <br>'n", data_get);
printf("%s'n", string); // Sending to browser
}
else if(!strcmp(getenv("REQUEST_METHOD"), "POST")){
printf("<br> POST METHOD");
}
printf(" </body></html>");
return 0;
}
Cgi没有向浏览器发送任何内容。如何使用 printf("%s'", string);将"Hello World"打印到浏览器,就像使用echo$j一样;从 PHP ?
问题解决了!
问题是 cgi 脚本的路径:http.open("GET", "cgi.exe?p=");。
必须在本地主机上放置完整路径:
http.open("GET", "http://localhost/cgi-bin/cgi.exe?p=");
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么是&&在没有if的行中的变量之间
- 如何在 C 语言中建立 JavaScript 和 CGI 之间的通信通道
- 在cgi和Javascript/Jquery之间传输数据