Mein Setup ist wie folgt:domänenübergreifende AJAX-Request seltsam auf Android-Handy nativen Browser verhalten
- Eine SQLite-Datenbank in einem meiner Apache Ordner
- Ein Perl-CGI-Skript im selben Ordner sitzt sitzt, mit öffentlichen Berechtigungen so, dass es Datenbank-Interaktionen
- AC-Programm läuft auf der gleichen Maschine verarbeiten kann, hört auf einem bestimmten Port für bestimmte JSON-Anfragen und antwortet mit speziell formatierten JSON-Daten
Eine Webseite, die hauptsächlich in jQuery und HTML geschrieben ist, muss ständig auf die SQLite-Datenbank und das C-Programm zugreifen. Es ist mit so AJAX-Anfragen - hier ein Beispiel aus dem Code:
function sendCommand(cmd, callback) {
$.ajax({url: "http://192.168.42.90:6112/?cmd=" + cmd,
dataType: "jsonp",
success: function(d,s,x) {
callback(d);
},
jsonpCallback: "json",
error: function(xhr) {
alert('Error: ' + xhr.status);
}
});
}
So rufe ich könnte es mit so etwas wie sendcommand („get_x“, updatePosition) - so dass sie entlang den get_x Befehl senden würden zu dem C-Programm, und wenn es eine gute Rückmeldung erhalten hat, führe diese Rückmeldung durch die updatePosition-Funktion aus.
Also alles funktioniert SPLENDIDLY, wenn ich auf einer Webseite auf dem gleichen Rechner laufe. Wenn ich auf eine andere Maschine umziehe - in diesem Fall speziell ein Android-Telefon, das über IP USB-Kabel festmacht, funktioniert es ... irgendwie. Das ist es, was mich verwirrt - es scheitert nicht im Stillen, wie ich es von JavaScript gewohnt bin. Stattdessen, so weit ich das beurteilen kann, sendet es die Anfrage aus, behauptet, dass es Daten zurückbekommen hat, und führt die Callback-Funktion aus - nur, laut dem C-Programm, ist nie etwas passiert; nach Wireshark wurden keine Pakete verschickt; und die "Daten", die es zurückbekommt, sind eine leere, speziell formatierte Zeichenkette. Wenn ich "(5,5)" als Ausgabe von C erwarte, wird es "(0,0)" - warum bekommt es überhaupt etwas? Viel weniger Füllung "(,)" mit 0s?
Sehr seltsam. Ich habe verschiedene Kleinigkeiten ausprobiert, wie den dataType in "json" ändern, sicherstellen, dass alle meine Berechtigungen korrekt eingerichtet sind, usw. Ich bin ziemlich sicher, dass Apache nicht eingreift, da es nichts in den Protokollen gibt - was? Das bringt mich dazu, dass ich ausgerechnet an Wireshark nichts sehe. Es ist, als würde das Telefon einfach nicht versuchen, die Anfrage zu stellen.
Entschuldigung, es hat zu lange gedauert, bis ich darauf zurückkam, aber dieser Vorschlag hat total funktioniert! Vielen Dank! – user462879