recuperar datos RESTful usando el método JQuery ajax()

Estoy tratando de obtener información de la API de Asana a través del método JQuery.ajax(). Pero no se devuelve el resultado deseado o se muestra un error.
Aquí está mi código parcial en JavaScript:

$(document).ready(function () {

    $('#buttonCallAjax').click(function () {
        jQuery.support.cors = true;
            $.ajax(
                {
                    type: "GET",
                    url: "https://app.asana.com/api/1.0/users/me",
                    data: "{}", 
                    contentType: "application/x-www-form-urlencoded; charset=utf-8",
                    dataType: "jsonp",
                    success: function (data) {


                        alert(data);

                    },
                    error: function (msg, url, line) {
                        alert('error trapped in error: function(msg, url, line)');
                        alert('msg = ' + msg + ', url = ' + url + ', line = ' + line);

                    }
                });
        });

    });

He leído mucho sobre el método ajax(), pero aún descubrí algunos parámetros de opciones en este método, como data, dataType (porque esta es una solicitud de dominio cruzado, usé jsonp).
¿Puede alguien ayudarme a obtener información de la API de Asana con éxito?

preguntado el 01 de julio de 12 a las 07:07

No creo que su servicio devuelva jsonp de forma predeterminada. Consulte la documentación y asegúrese de que sea compatible con jsonp. Sospecho que hay alguna opción de cadena de consulta que lo haría. -

¿Está utilizando una herramienta de depuración como Firebug para Firefox? Chrome también tiene uno incorporado. De esta manera, puede ver que se apaga la solicitud HTTP y le mostrará el código de estado y podrá ver los encabezados y el cuerpo de la respuesta. -

Parece que esa llamada a la API necesita autorización y no proporciona ninguna.

Para Despertar: Sí, estoy usando Firebug para Firefox, y usando firebug puedo verificar que el estado es 200 OK, y en la opción Net, en la opción de respuesta hay información que quiero. Además, cuando tengo el html que incluye la ejecución de javascript en firefox (me refiero a hacer clic en el botón), solo muestra "msg = [object Object], url = parsererror, line = Error: jQuery172019258527724872776_1341163430791 no fue llamado". PERO veo los contenidos que quiero en la respuesta a través de firebug. ¡¡¡Muchas gracias!!! -

Para Tsukimi, sí, he pensado en este problema, pero no sé dónde agregar la autorización (API de Asana le da a cada usuario una clave de API única) en el método ajax. ¡Muchas gracias! -

2 Respuestas

Aunque parece que la API de Asana actualmente no es compatible con JSONP, si en el futuro lo hacen y necesita realizar la autenticación, puede hacerlo con el siguiente código.

$.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  beforeSend : function(xhr) {
      xhr.setRequestHeader('Authorization', 'Basic ' + btoa(API_KEY + ":"));

  }
);

El btoa la función codifica en base64 pero su No se admite en todos los navegadores, por lo que es posible que deba usar alguna otra biblioteca, si necesita admitir navegadores más antiguos.

Noticias

El nombre de usuario también se puede configurar directamente con jQuery sin codificar ni configurar encabezados.

 $.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  username : API_KEY
 });

Cuando use JS para acceder a la API, su API_KEY estará allí en la página en texto claro. Tal vez esto debería hacerse en el lado del servidor.

Respondido 02 Jul 12, 03:07

Después de investigar un poco, no parece que la API de Asana admita la devolución de JSONP en este momento.

Además, después de algunas pruebas por mi cuenta, tampoco parece que sean compatibles con CORS, por lo que los XHR de origen cruzado parecen descartados. De acuerdo, no probé con la autenticación adecuada, y su servicio puede configurarse para otorgar solo encabezados CORS a las solicitudes que están autorizadas.

Como alternativa, puede hacer que un script del lado del servidor emita una solicitud web genérica a la API y envíe los resultados a su interfaz de usuario.

Respondido 02 Jul 12, 10:07

"¿Agregue CORS a las respuestas de su servidor para autorizar solicitudes XHR contra el servicio api de Asana"? ¿Quiere decir agregar "jQuery.support.cors = true", de lo contrario no entendí lo que quiere decir sobre agregar CORS? Muchas gracias. - lxx22

Lo siento, estaba confundido. CORS son encabezados que su servicio puede establecer que permiten a los navegadores realizar solicitudes XHR en otro dominio. Pero tampoco me parece que apoyen eso. - Justin Summerlin

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