Philipp: Ajax Problem:laueft nur mit IE

Beitrag lesen

Hallo

Folgende Problemstellung die es fuer mich zu loesen gibt: Ich soll ein HTML Interface implementieren, welches mir bei druecken eines buttons einen bestimmten XML Request an mein in C++ implementiertes API schicken soll. Um dies zu bewerkstelligen verwenden wir das Ajax Konzept. Ich habe nun ein sehr simples Testprogramm, welches mir einen Request runterschickt und den selben dann einfach wieder ausliest und dann in einem Textfeld ausgibt. Im Internetexplorer haut das einwandfrei hin, jedoch mit Firefox bekomme ich keine Rueckmeldung. Es tut sich rein gar nix. Eigentlich sollte ja das HTTPXMLREQUEST Objekt ident sein in beiden Faellen. Daher bin weiss ich nicht wo der Fehler liegen kann. Waere dankbar wenn ein Experte mir hier weiterhelfen koennte. Anbei Testcode vom HTML file sowie der CGI Applikation:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>ZIP Code to City and State using XmlHttpRequest</title>
<script language="javascript"  type="text/javascript">
var url = "http://localhost/cgi-bin/GetPost.exe"; // The server-side script
function handleHttpResponse() {
 if (http.readyState == 4) {
    //Split the comma delimited response into an array
    //results = http.responseText.split(",");
    //document.getElementById('city').value = results[0];
    //document.getElementById('state').value = results[1];
    document.getElementById('XMLRequest1').value = http.responseText;
 }
}

function XMLRequest(request) {
http.open("POST", url, true);
//http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
http.setRequestHeader("Content-Type", "text/xml");
http.onreadystatechange = handleHttpResponse;
//http.send("Test:" + zipValue);
//http.send("<?xml version='1.0' encoding='UTF-8'?>");
if (request == 0) {
  http.send("<?xml version='1.0' encoding='UTF-8/16'?><rl_api_cmd>new_session</rl_api_cmd>");
}
else if (request == 1) {
  http.send("<?xml version='1.0' encoding='UTF-8/16'?><rl_api_cmd>get_information</rl_api_cmd>");
 }
}

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}
var http = getHTTPObject(); // We create the HTTP Object
</script>
</head>
<body>
<form action="post">
<p>
<input type="button" name="Verweis" value="New Session"
onClick="XMLRequest(0);"
</p>
<p>
<input type="button" name="Verweis1" value="Get Information"
onClick="XMLRequest(1);"
</p>
<p>Sent XML Request to API:<br>
<textarea name="XMLRequest1" cols="50" rows="10"></textarea>
</p>
</form>

</body>
</html>

/*
 *  Funktion liest Daten in der POST- oder GET-Methode ein.
 *  Rückgabewert: String puffer mit den Daten
 *  bei Fehler  : NULL
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "rl_gw_api.h"

/*
 *  Da die Funktion strdup() in der Headerdatei <string.h> keine
 *  ANSI C-Funktion ist, schreiben wir eine eigene
 */
/*char *Strdup(const char *str)
{
   char *p;
   if(NULL == str)
      return NULL;
   else
      {
         p = malloc(strlen(str)+1);
        if(NULL == p)
           return NULL;
        else
           strcpy(p, str);
      }
   return p;
} */

unsigned long size;

char *getdata()
{
   char *puffer = NULL;
   char *request = getenv("REQUEST_METHOD");
   char *cont_len;

if(  NULL == request )
      return NULL;
   else if( strcmp(request, "POST") == 0 )
      {
         /* Die Methode POST -> Länge des Strings
            ermitteln (CONTENT_LENGTH) */
         cont_len = getenv("CONTENT_LENGTH");
         if( NULL == cont_len)
            return NULL;
         else
            {
               /* String CONTENT_LENGTH in
                  unsigned long umwandeln */
               size = (unsigned long) atoi(cont_len);
               if(size <= 0)
                  return NULL; /* Keine Eingabe!?!? */
            }
         /* Jetzt lesen wir die Daten von stdin ein */
         puffer =(char *) malloc(size+1);
         if( NULL == puffer )
            return NULL;
         else
            {
               if( NULL == fgets(puffer, size+1, stdin) )
                  {
                     free(puffer);
                     return NULL;
                  }
               else  /* Rückgabewerte an den Ausrufer */
                  return puffer;
            }
      }
   else /* Keine POST-Methode wurde verwendet */
      return NULL;
}

void main() {

char *buff = NULL;
  unsigned int buffsize = (unsigned int) (size + 1);

char **buffout = NULL;
  unsigned int *buffoutsize = NULL;

int r = RL_API_STATUS(rl_api_initialise());

if (r == 0) {
     buff = getdata();
     //printf("Content-type: text/html\n\n Connection established %s", buff);
  }

int s = RL_API_STATUS(rl_api_execute(buff,buffsize,buffout,buffoutsize));
  printf("Content-type: text/html\n\n Connection Established: %i Execute Command: %i XML Request: %s", r, s, buff);

}

VIelen Dank Philipp