Duda phonegap-Json

Niusuce

Buenas:

Ando de prácticas y me han pedido una aplicación que en la que se carga un comboBox con datos obtenidos desde un servidor web y a partir de eso se realizan algunas funciones. Usamos JSON para comunicarnos con el servidor, lo cual en Java es una maravilla y tenía la app hecha en 3 días (contando 2 para la interfaz gráfica con fragments y demás).

Ahora me la han pedido usando Phonegap, lo que implica usar HTML y Javascript y estos dos no los he tocado nunca. Avanzo como puedo pero la parte de usar el JSON aquí me lía muchísimo. He probado mil métodos, pero no avanzo nada. Me imagino que será la construcción de la función, pero tampoco sé verle el fallo. Os dejo el código por aquí, a ver si podeis ayudarme un poco.

JSON:

[{"Codigo_usuario":"125","Nombre":"luis"},{"Codigo_usuario":"144","Nombre":"pedro"},{"Codigo_usuario":"3993","Nombre":"ANGEL"}]

Funciones para cargar el Select:

function cargarCMB(){
    var cmb = document.getElementById("cmbUsuarios");
    cmb.options[0] = new Option("Selecciona usuario");
    var data = cogerJSON();
    for(var i=1;i<=data.length;i++){ 
        cmb.options[i] = new Option(data[i-1].Nombre);
        }
    }

function cogerJSON(){
        var datos;
        $.ajax({
           type: "POST",
           contentType: "application/json; charset=utf-8",
           data: "{ your: 'data' }",
           dataType: "json",
           url: "url", //la url no la pongo xD
           success: function (data) {
               datos=data;
           }
        });
    return datos;
}
Maldercito

Ese return datos supongo que te da un undefined. Eso es porque se ejecuta antes de que termine la petición a servidor. Lo que has de hacer es pasarle un callback por parámetro al a función cogerJSON y ejecutarlo en la opción success cuando obtienes data.

Tal que así:

function cogerJSON(cb){
        var datos;
        $.ajax({
           type: "POST",
           contentType: "application/json; charset=utf-8",
           data: "{ your: 'data' }",
           dataType: "json",
           url: "url",
           success: function (data) {
               cb(data);
           }
        });
}

Luego cuando llames a la función harías algo como esto:

cogerJSON(function(data){
// Haces con data lo que quieras
});

No estaría de más que le pasaras una segunda función para controlar el evento de error en la llamada por AJAX.

1
Niusuce

Gracias por la ayuda. También descubrí que el lado del servidor hacía una comprobación de seguridad y, como esta aún está en pruebas y sin identificar, le vetaba el acceso.

Ahora sólo me falta descubrir por qué una url de este servidor sí que funciona mientras que la otra, del mismo servidor, me tira esto:

Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.