es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cordova 10 no puede enviar una solicitud ajax a una URL http.

Estoy intentando enviar datos JSON a una URL HTTP sin éxito (he intentado enviar los mismos datos a un URL HTTPS con éxito).
Tengo esta configuración:
config.xml

<access origin="*"></access>
<allow-intent href="http:///*"></allow-intent>
<allow-intent href="https:///*"></allow-intent>

AndroidManifest.xml

android:usesCleartextTraffic="true"

Encabezado HTML

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'; img-src * data: 'unsafe-inline'; connect-src * 'unsafe-inline'; frame-src *;"> 
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:; style-src 'self' 'unsafe-inline' *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *">
<script>
  $.ajax({
    type: "GET",
    url: url,
    dataType: "jsonp",
    jsonp: 'callback',
    crossDomain: true,
    async: true,
    data: {
      id: results.rows.item(i).id,
      bolla: results.rows.item(i).bolla,
      anno: results.rows.item(i).anno,
      magazzino: results.rows.item(i).magazzino,
      articolo: results.rows.item(i).articolo,
      quantita: results.rows.item(i).quantita,
      term: terminale
    },
    success: function (data) {
      console.log(data)
    },
    error: function (xhr, textStatus, err) {
      alert("readyState: " + xhr.readyState);
      alert("responseText: " + xhr.responseText);
      alert("status: " + xhr.status);
      alert("text status: " + textStatus);
      alert("error: " + err);
    }
  });
</script>

Si utilizo JSON, devuelve devicereadystate=0 y error. Si utilizo JSONP, devuelve devicereadystate=4 y error 404 (la URL es correcta, si la pego en un navegador funciona).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    A partir de la información proporcionada, parece que podría haber varias razones por las cuales los datos JSON no se envían correctamente a la URL HTTP. Aquí hay algunas posibles soluciones a considerar:

    1. Verificar la URL: Asegúrese de que la URL que se está utilizando sea correcta y accesible. Si la URL funciona en un navegador, intente copiarla y pegarla en el campo de dirección de la aplicación y vea si se carga. Si no es así, podría haber un problema con la forma en que la aplicación intenta acceder a la URL.
    2. Usar CORS: Dado que la URL es una URL HTTP, el servidor debería admitir CORS (Compartir recursos de origen cruzado) para permitir que la aplicación acceda a él. En este caso, dado que la aplicación está utilizando datos JSON, podría ser que el servidor no esté configurado correctamente para manejar solicitudes de origen cruzado. Consulte con el administrador del servidor para asegurarse de que admita CORS y que los encabezados apropiados estén configurados.

    3. Usar HTTPS: El hecho de que los mismos datos se puedan enviar correctamente a un punto final HTTPS indica que el problema podría estar relacionado con la configuración de seguridad de la aplicación. Por lo general, se recomienda utilizar HTTPS para garantizar la seguridad de los datos del usuario, así que considere utilizar una URL HTTPS en su lugar.

    4. Verificar la configuración de red: Verifique que el dispositivo esté conectado a Internet y que la configuración de red esté configurada correctamente. En algunos casos, la aplicación podría no poder conectarse al servidor debido a un firewall u otras restricciones de red.

    5. Usar un método diferente: Considere utilizar un método diferente para enviar datos al servidor, como utilizar la API fetch en lugar de jQuery.ajax(). La API fetch proporciona una forma más moderna de hacer solicitudes HTTP y podría ser más adecuada para enviar datos JSON.

    Al revisar las soluciones anteriores, un experto en TI especializado en JavaScript, Android, Ajax y desarrollo de aplicaciones móviles con Cordova podría resolver el problema.

Comments are closed.