Requête AJAX interdomaine se comportant étrangement sur le navigateur natif du téléphone Android

Ma configuration est la suivante:

  • Une firebase database SQLite se trouve dans l’un de mes dossiers Apache
  • Un script Perl cgi se trouve dans le même dossier, avec des permissions publiques, afin de pouvoir gérer les interactions avec la firebase database.
  • Un programme AC, exécuté sur le même ordinateur, écoute sur un port spécifique des requêtes JSON spécifiques et répond avec des données JSON spécifiquement formatées

Une page Web, écrite principalement en jQuery et HTML, doit accéder à la fois à la firebase database SQLite et au programme C. Il utilise des requêtes AJAX – voici un exemple tiré 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) – pour qu’il envoie la commande get_x au programme C et, s’il obtient un retour positif, exécute ce retour via la fonction updatePosition.

Donc, tout cela fonctionne SPLENDIDEMENT si je vis sur une page Web sur le même ordinateur. Si je passe à une autre machine – dans ce cas précis, à un téléphone Android, en mode IP connecté via USB, cela … fonctionne en quelque sorte. C’est ce qui me laisse perplexe – il n’échoue pas en silence, comme j’ai l’habitude de faire JavaScript. Autant que je sache, il envoie la demande, affirme qu’il a récupéré les données et exécute la fonction de rappel – uniquement, selon le programme C, rien ne s’est jamais 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)” comme sortie de C, cela devient “(0,0)” – pourquoi obtient-il quelque chose? Beaucoup moins de remplissage “(,)” avec des 0?

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

c’est peut-être la mise en cache des requêtes ajax? essayez de définir cache: false dans vos demandes ajax jQuery.

Avez-vous vérifié la console dans Firebug ou un débogueur JS? J’ai rencontré le problème que jquery vous empêche de faire des appels AJAX de cette manière en raison de problèmes de sécurité et je vais retourner cette erreur.

 Access to ressortingcted URI denied" code: "1012 

Cependant, il semblerait que certaines personnes aient tenté de contourner le problème. Donnez-lui une lecture si vous n’avez pas déjà http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide