origin - Las solicitudes de varios dominios que usan PhoneGap y jQuery no funcionan
jquery ajax access-control-allow-origin (5)
Agregar esto al config.xml me salvó
<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" version="1.1.1" />
<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="*" />
Me desconcertó el por qué no se cargó ningún recurso externo, incluso Google Maps y mi herramienta de depuración remota. ¡Esto me salvó!
Estoy creando una aplicación PhoneGap para Android. Para obtener datos del servidor (remoto) realizo una llamada REST utilizando la función $ .ajax () de jQuery. Hay algunas cosas que debes saber:
- El tipo de la llamada debe ser POST
- El servidor espera datos JSON (al menos nombre de usuario y contraseña)
- El servidor devuelve datos JSON
El código:
function makeCall(){
var url = "http://remote/server/rest/call";
var jsonData =''{"username":"''+$(''#username'').val()+''","password":"''+$(''#password'').val()+''"}'';
$.ajax({
headers: {"Content-Type":"application/json; charset=UTF-8"},
type: "POST",
url: url,
data: jsonData,
dataType: "json",
success: succesFunction,
error: errorFunction
});
}
Pero, esto no funciona. Cuando uso Firebug para ver la respuesta de los servidores, no hay nada. Con TcpTrace puedo ver los encabezados de la solicitud. En lugar de un método POST esperado, hay un método OPTIONS, con algunos encabezados extraños agregados.
OPTIONS /remote/server/rest/call HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
Sé que tiene algo que ver con hacer solicitudes entre dominios, pero no sé cómo resolver el problema. Intenté algunas cosas para arreglarlo, pero sin resultado:
- Use ''jsonp'' en lugar de ''json''
- Trate de usar el Intercambio de Recursos de Origen Cruzado (CORS)
El problema también tiene algo que ver con la misma política de origen, pero esto no se aplica al archivo: // protocolo que usa PhoneGap para cargar un archivo html local.
En mi archivo AndroidManifest.xml, la opción
<uses-permission android:name="android.permission.INTERNET" />
Está establecido.
Estoy tratando de arreglar esto por 2 días ahora, pero ningún resultado hasta ahora. ¿Es esto posible hacer? ¿Tienes algún consejo para mí para que pueda seguir adelante?
¡Gracias por adelantado!
Configuración de JQuery: $. Support.cors = true;
Intente establecer dataType:jsonp
y establecer crossDomain:true
Para las solicitudes ajax de dominios cruzados, puede usar jsonp. http://api.jquery.com/jQuery.ajax/
O puede agregar callback =? a tu url.
Resolví el problema yo solo. El problema se encuentra en la url, donde tengo que agregar un dominio. Cambié
var url = "http://remote/server/rest/call";
a
var url = "http://remote.mydomain.com/server/rest/call";
¡y funciona!
Asumí que la primera url debería funcionar porque funciona en una aplicación de iPhone con exactamente la misma url y la misma configuración. También tiene algo que ver con un firewall doble (firewall de Windows y ESET) donde apago el firewall de Windows.
De todos modos, gracias por tus respuestas!
necesitas hacer una lista blanca de tus dominios externos. solo vaya a su archivo phonegap / cordova plist en xcode y agregue una nueva entrada, haga que su valor sea * y pueda acceder a cualquier sitio web.
También sepan que esto NO FUNCIONARÁ EN UN NAVEGADOR. Los navegadores tienen problemas de dominio cruzado, no phonegap o dispositivos móviles.