2010-12-14 7 views
1

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.

Antwort

3

vielleicht Caching die Ajax-Anfragen? Versuchen Sie Cache zu setzen: false in Ihren jquery ajax Anfragen.

+0

Entschuldigung, es hat zu lange gedauert, bis ich darauf zurückkam, aber dieser Vorschlag hat total funktioniert! Vielen Dank! – user462879

0

Haben Sie die Konsole in Firebug oder einem JS-Debugger überprüft? Ich lief in das Problem, dass Jquery verhindert, dass Sie AJAX tun aufgrund von Sicherheitsproblemen auf diese Weise Anrufe und gibt diese Fehler

Access to restricted URI denied" code: "1012 

aber es sieht aus wie einige Leute Arbeit arounds versucht haben. Wenn Sie noch nicht gelesen haben http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

+0

Leider kann dieses Telefon nicht auf das Internet zugreifen - ich kann hier keinen Debugger setzen. :(Es sei denn, es gibt eine native, die mit Android OS kommt, die ich gerne würde! – user462879