如何在 C 语言中建立 JavaScript 和 CGI 之间的通信通道

How to establish communication channel between javascript and cgi in C?

本文关键字:CGI 之间 通道 通信 JavaScript 建立 语言      更新时间:2023-09-26

如何让 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=");