El dominio cruzado REST AJAX no ejecuta la devolución de llamada

Tengo muchos problemas para ejecutar una llamada REST de dominio cruzado con la función Jquery ajax.

Aquí está el código:

 $.ajax({
            url: restUrl,
                type: 'GET',
                crossDomain : true,
                dataType: 'jsonp',
                jsonp: false,
                jsonpCallback: 'jsonpCallbackTest',
                error: function(xhr, status, error) {
                    console.log('not OK '+xhr);
                    console.log('not OK '+status);
                    console.log('not OK '+error);
                },
                success: function(jsonp) {
                    alert("success");
                }
            });

y esto es lo que obtengo en la consola de Firebug:

no está bien [objeto Objeto] Init.js:872
no está bien parsererror Init.js:873
no está bien Error: no se llamó a jsonpCallbackTest


¿Qué estoy haciendo mal?

saludos Matej

preguntado el 04 de julio de 12 a las 08:07

donde esta esta funcion jsonpCallbackTest? -

función externa con llamada ajax -

1 Respuestas

¿Qué estoy haciendo mal?

Es difícil decirlo a partir de la información del código que proporcionó en su pregunta. Podrían haber varias razones. Por ejemplo, el servicio web REST remoto que intenta invocar devuelve una respuesta JSON en lugar de JSONP.

También parece haber definido el jsonpCallbackTest función y, sin embargo, está utilizando un controlador de éxito anónimo que son incompatibles. Prueba así:

$.ajax({
    url: restUrl,
    type: 'GET',
    jsonpCallback: 'jsonpCallbackTest',
    error: function(xhr, status, error) {
        console.log('not OK '+xhr);
        console.log('not OK '+status);
        console.log('not OK '+error);
    }
});

y luego defina la función jsonpCallbackTest:

function jsonpCallbackTest(jsonp) {
    alert("success");
}

También deberá consultar la documentación del servicio web remoto sobre cómo especificar la devolución de llamada JSONP. Si podría pasarlo como parámetro de cadena de consulta.

Por lo general, se prefiere dejar que jQuery pase un nombre de función de devolución de llamada aleatoria al servicio web:

$.ajax({
    url: restUrl,
    type: 'GET',
    dataType: 'jsonp',
    success: function(json) {
        alert("success");
    },
    error: function(xhr, status, error) {
        console.log('not OK '+xhr);
        console.log('not OK '+status);
        console.log('not OK '+error);
    }
});

Respondido 04 Jul 12, 09:07

gracias, por su respuesta, pero si pruebo su código obtengo: no está bien [objeto Objeto] no está bien parsererror no está bien Error: jQuery1720902001413051039_1341388798594 no fue llamado Cambié mi parámetro de jsonpCallback: 'jsonpCallbackTest', a jsonpCallback: jsonpCallbackTest, y ahora esto se ejecuta la función, pero no puedo obtener parámetros de la llamada ajax a esta función. ¿Alguna idea de cómo hacerlo? - sobis

Falta una coma ',' para la función de éxito - Suave Nti

@Sobis, el jsonpCallback el parámetro es una cadena. Debería no cambiarlo a jsonpCallback: jsonpCallbackTest, esto está mal. ¿Probaste mi último ejemplo de código? ¿Revisó la documentación del servicio web RESTful que está tratando de invocar? ¿Cuál es el nombre del parámetro que necesita pasar para la devolución de llamada? ¿Qué URL estás tratando de invocar? ¿Es de acceso público? Puedo ayudarte si proporcionas más detalles. - darin dimitrov

Sí, probé tu código, pero no funciona. Si pruebo tu primera llamada ajax, obtengo "XMLHttpRequest no se puede cargar 192.168.100.106:2080/ResEvo.Mind.Rest/rest/admin/workspace/…. Origen localhost: 8080 Access-Control-Allow-Origin no lo permite". sobis

Cuando navega directamente a la http://192.168.100.106:2080/ResEvo.Mind.Rest/rest/admin/workspace/postgres dirección en tu navegador ¿qué ves? ¿Respuesta JSON o JSONP? - darin dimitrov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.