2010-12-14 44 views
1

Ma configuration est comme ceci:Cross domaine requête AJAX se comportant bizarrement sur le navigateur natif de téléphone Android

  • base de données Un SQLite se trouve dans l'un de mes dossiers Apache
  • Un script Perl cgi se trouve dans le même dossier, avec des autorisations publiques, de sorte qu'il peut traiter des interactions de base de données
  • programme alternatif, fonctionnant sur la même machine, écoute sur un port spécifique pour les demandes JSON spécifiques et répond avec des données JSON spécifiquement formatés

Une page Web, écrite principalement en jQuery et HTML, doit accéder à la fois à la base de données SQLite et au programme C en permanence. Il le fait en utilisant des requêtes AJAX - est ici un exemple du 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); 
    } 
}); 
} 

donc je pourrais l'appeler avec quelque chose comme sendCommand (« get_x », updatePosition) - afin que ce serait envoyer la commande get_x le long au programme C, et, s'il obtient un bon retour d'informations, exécutez les commentaires via la fonction updatePosition.

Donc, tout cela fonctionne SPLENDIDLY si je cours sur une page Web sur la même machine. Si je passe à une autre machine - dans ce cas, en particulier, un téléphone Android, faisant l'IP attaché sur USB, ça ... sorte de travaux. C'est ce qui me laisse perplexe - il n'échoue pas silencieusement, comme je suis habitué à faire JavaScript. Au lieu de cela, autant que je sache, il envoie la requête, prétend qu'il récupère les données et exécute la fonction de rappel - seulement, selon le programme C, rien ne s'est produit; selon Wireshark, aucun paquet n'a été envoyé; et les "données" qu'il récupère sont une chaîne vide spécialement formatée. Si je m'attends à "(5,5)" en tant que sortie de C, ça devient "(0,0)" - pourquoi est-ce que ça obtient quoi que ce soit? Beaucoup moins de remplissage "(,)" avec 0s?

Très étrange. J'ai essayé diverses petites choses, comme changer le dataType en "json", m'assurer que toutes mes permissions sont bien réglées, etc. Je suis à peu près sûr qu'Apache n'interfère pas, car il n'y a rien dans les logs - me fait est que je ne vois rien sur Wireshark, de toutes choses. C'est comme si le téléphone n'essayait pas de faire la demande.

Répondre

3

peut-être cache-t-il les requêtes ajax? essayez de mettre en cache: false dans vos requêtes jquery ajax.

+0

Désolé, cela a pris trop de temps pour y revenir, mais cette suggestion a totalement fonctionné! Merci! – user462879

0

Avez-vous vérifié la console dans firebug ou un débogueur JS? Je suis tombé sur la question qui jquery vous empêche de faire des appels AJAX de cette manière en raison de problèmes de sécurité et renvoie cette erreur

Access to restricted URI denied" code: "1012 

Cependant, il semble que certaines personnes ont tenté arounds de travail. Dites-le attentivement si vous ne l'avez pas déjà fait http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

+0

Malheureusement, ce téléphone ne peut pas accéder à Internet - je ne peux pas mettre un débogueur ici. :(A moins qu'il y ait un natif qui vient avec Android OS, que j'aimerais! – user462879