JavaScript Request funktioniert nicht

Maik1

Lt. Junior Grade
Registriert
Jan. 2005
Beiträge
408
Hallo,
ich habe ein Programm mit einer API am laufen. An diese möchte ich mittels AJAX Request einen Befehl schicken sowie, den daraufhin angezeigten Code zurückerhalten und anzeigen lassen. Erschwerend kommt hinzu, dass diese API eine Authentifizierung mittels Usernamen und Passwort erfordert. Ich habe die Funktionsweise des Programms mittels eines normalen HTML Formulars getestet, was auch ohne Probleme funktioniert hat.

Hier der Code des HTML-Formulars:
HTML:
<form action="http://ip:port/api" method="post" enctype="/x-www-form-urlencoded; charset=UTF-8">
<input name="op" type="text" value="nexttrack"> //Die beiden zu übertragenden Paramter
<input name="seq" type="text" value="any value">
<input name="" type="submit">
</form>
Nach dem absenden des Formulars kommt dann auch die Authentifizierung durch ein im Browser angezeigten Fenster.

Nun zu dem Javascript Code:
HTML:
<script src="prototype.js" type="text/javascript"></script>
<script type="text/javascript">
new Ajax.Request('http://ip:port/api',
  {
    method:'post',
	contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
	username: 'username',
	password: 'password',
	parameters: {op:"nexttrack", seq:"any value"},
    onSuccess: function(transport){
      var response = transport.responseText;
        alert("Success! \n\n" + response);
    },
    onFailure: function(){ alert('Something went wrong...') }
  });
</script>
Schätzungsweise läuft bei diesem Code etwas mit der Authentifizierung falsch, da laut Programm-Logfile kein Befehl ausgeführt wurde/ entgegengenommen wurde.

Was ist an der Authentifizierung an dem AJAX Script falsch?

Ich hoffe auf Eure unterstützung.

MfG
Maik
 
Kannst du nicht einfach ein Mini-Wrapperscript in PHP bauen, welches die Authentifizierung übernimmt?
 
Ich hab jetzt wieder mal rumprobiert, komme aber auf keinen grünen Zweig.

Code:
<script type="text/javascript">
new Ajax.Request('http://ip:5555/api',
  {
    method:'post',
	postBody:'op=nexttrack&seq=45&username=admin&password=pass',
	contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
	parameters: {op:"nexttrack", seq:"123"},
    onSuccess: function(transport){
      var response = transport.responseText;
        alert("Success! \n\n" + response);
    },
    onFailure: function(){ alert('Something went wrong...') }
  });





</script>

Es kommt einfach keine Rückmeldung der API, sondern nur "Success". Wenn sich jemand damit auch sehr gut auskennt wäre s klasse wenn er mich vielleicht direkt kontaktieren könnte, damit wir das Problem schneller lösen können.
 
Was für eine API ist es denn? Vielleicht kann man dir dann sagen, was falsch läuft.
 
Die API ist von einem Stream-Prog. namens "sc_trans". Dowmloaden kann man es sich hier. Eine Dokumentation ist dort auch enthalten, allerdings stehen keine Beispiele wie man die API direkt mittels Javascript anspricht.
 
<script type="text/javascript">
new Ajax.Request('http://ip:5555/api',
{
method: 'post',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
parameters: {op: "nexttrack", seq: "123"},
onSuccess: function(transport){
var response = transport.responseText;
alert("Success! \n\n" + response);
},
onFailure: function(){ alert('Something went wrong...') }
});
</script>

Ist der Port auch richtig? ich habe in der Doc Port 4444 gesehen. Es kann auch sein, dass dein Response-Text aus irgendeinem Grund nicht mit in eine Alert-Box reingeht. Eventuell kannst du den mal auf der Webseite ausgeben.

Hm, müsste ansich schon gehen..
 
Ja, der Port ist richtig, dieser ist in der config Datei so festgelegt. Wenn ich es über ein HTML Formular mittels POST sende geht es ja auch über diesen Port problemlos. Der XML Response Code sollte eigentlich keine Probleme machen. Normalerweise sollte so etwas z.b. zurückkkommen.
Code:
<?xml version="1.0" encoding="UTF-8" ?>
<response seq="45">
<data><eventlist>
<event type="dj">
<dj archive="0">dj</dj>
<active>1</active>
<id>1</id>
<calendar  starttime="00:00:00" />
</event>
</eventlist></data>
</response>
 
HTML-Datei und das Ziel des Ajax-Requests müssen auf demselben Server und demselben Port (!) liegen. Stichwort SameOrigin Policy (zur Sicherheit). Nur in älteren IEs geht das mit unterschiedlichen Ports. In allen anderen Fällen muss man es notfalls über ein PHP-Wrapper-Skript (welches ich oben schon vorgeschlagen habe!) umgehen.
 
Und wie müsste so etwas aussehen? Sorry, aber ich habe so etwas noch nie programmiert.
Wenn man sich sc_trans herunterläd ist auch ein Ordner beigefügt ("testui"), wo bereits so etwas mit javascript programmiert wird. Nur laut dem Hersteller gehen diese programmierten Seiten nicht, was ich leider auch schon festgestellt hatte.
In dem Ordner habe ich auch folgendes Codeschnippsel gefunden, wo anscheinend ja auch so eine Anfrage gemacht wird.

HTML:
$.ajax({
	type: "POST",
	username: gAPIUsername,
	password: gAPIPassword,
	url: gAPIURL,
	data: apiParams,
	cache:false,
	//dataType:"xml",
	//dataFilter:function (data, type) {alert("dataFilter:data " + data);alert("dataFilter:type " + type);return data;},
	error: efunc,
	success:sfunc,
	//async:false
	}
   );
 
Zurück
Oben