Bonjour,

Je suis actuellement en train de développer une application avec cordova. J'utilise des requètes xmlhttprequest pour récuperer des donnés d'une base mysql.

Tous fonctionnait pendant un temps puis j'ai surement modifier quelque chose qu'il ne fallait pas et je me retrouve avec le problème suivant : lorsque j'ouvre le projet dans chrome tous fonctionne mais lorsque je compile l'application les requètes ne renvoie rien et je n'arrive pas à trouver d'ou proviens le problème (c'est d'autant plus difficile qu'il n'y a pas de console pour voir les erreures).

J'ai bien fait attention aux Content-Security-Policy :

<meta http-equiv="Content-Security-Policy" http-equiv="Content-Security-Policy" content="default-src 'unsafe-inline' 'self' http://www.motocuture.com data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;script-src * data: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'"/>

Dans ma page php distante j'ai inséré la ligne suivante :

header("Access-Control-Allow-Origin: *");

Mon fichier config.xml :


<?xml version='1.0' encoding='utf-8'?>
  <widget id="fr.IMTAtlantique.BDS" version="1.0.1" android-versionCode="10001" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
      <name>BDS</name>
      <description>
          A sample Apache Cordova application that responds to the deviceready event.
      </description>
      <author email="dev@cordova.apache.org" href="http://cordova.io">
          Apache Cordova Team
      </author>
      <content src="index.html" />
      <access origin="*" />
      <access origin="http://motocuture.com*" />
      <access origin="http://www.motocuture.com*" />
      <access origin="https://motocuture.com*" />
      <access origin="https://www.motocuture.com*" />
      <allow-intent href="http://*/*" />
      <allow-intent href="https://*/*" />
      <allow-intent href="tel:*" />
      <allow-intent href="sms:*" />
      <allow-intent href="mailto:*" />
      <allow-intent href="geo:*" />
      <platform name="android">
          <allow-intent href="market:*" />
      </platform>
      <platform name="ios">
          <allow-intent href="itms:*" />
          <allow-intent href="itms-apps:*" />
      </platform>
      <preference name="android-targetSdkVersion" value="31"/>
      <icon src="www/img/logo.png" platform="android" width="57" height="57" density="mdpi" />
  </widget>

Et les requètes sont lancées avec cette fonction :

    function Xhr(name,form = [],type = 'text',Fct = function(a){}){

      var startURL = "http://www.motocuture.com/App/BDS/";
      var token = window.localStorage.getItem("remember_token");

      var Xhr = new XMLHttpRequest();

      Xhr.open("POST", startURL+name+".php", true);
      Xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
      Xhr.send("form="+JSON.stringify(form)+"&token="+token);

      Xhr.onreadystatechange = function(){
          if(this.readyState == 4 && this.status == 200){
              console.log(this);

              if (type == 'text') {
                  var Response = this.responseText;
              }else if(type == 'array'){
                  var Response = JSON.parse(this.responseText);
              }

              try{
                  Fct(Response);
              } catch (error){}

          }
      }
  }

Exemple :

    Xhr('campagne',[],'text',InsertPage('campagne',CampagneInitialize));

Voilà, j'ai essayé beaucoup de truc pour résoudre le problème sans succès je suis à cours d'idée.

Si quelqu'un arrive à résoudre mon problème ça serait vraiment super, merci.

1 réponse


Bonjour,

Il me semble qu'il vous manque le pluging:
<plugin name="cordova-plugin-whitelist" spec="^1.3.3" />

Je vous invite à regarder ceci:
https://www.npmjs.com/package/cordova-plugin-whitelist

Bonne journée