Pregunta

Como no se puede aplicar encabezados personalizados en JSONP llama , ¿cómo puedo hacer peticiones entre dominios y aplicar encabezados personalizados utilizando jQuery?

básicamente estoy tratando de acceder a Google Docs con jQuery y necesidad de aprobar un token de autenticación:

var token = "my-auth-token";
$.ajax({
  url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
  dataType: 'json',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  }
});

Nota: El objetivo de esto es completamente de derivación de la capa de aplicación. Es sencillo de usar rubí para conectarse a la API de datos de Google, pero se necesita una gran cantidad de recursos de análisis sintáctico alimentos todo el tiempo del lado del servidor.

¿Fue útil?

Solución

Se puede usar la biblioteca de cliente JavaScript de Google para consultar la API Docs. A pesar de que no viene con ayudantes para Docs en concreto, todavía se puede utilizar con la mayoría de las API, incluyendo Docs. Ver este entrada en el blog por un empleado de google que muestra un ejemplo de trabajo.

Si termina en un bucle infinito de autorizaciones, ver esta relacionado pregunta de los grupos de Google. Básicamente, las galletas no se establecen con la suficiente rapidez, por lo que cuando los controles de la biblioteca cliente de JavaScript, no encuentra nada y vuelve a dirigir a la página de autorización OAuth. Una solución es añadir ya sea un pequeño retraso antes de que se haga el cheque, o usar un botón de inicio de sesión que inicia la autorización en lugar de hacerlo al cargar la página.

También habría que añadir cualquier imagen a su página que reside en el mismo dominio. Se puede ocultar con CSS, siempre y cuando en el DOM.

Usando el ejemplo de la entrada de blog anterior, yo era capaz de recuperar mi lista de documentos con JavaScript solo. Aquí está la función de inicialización modificado he utilizado para deshacerse del bucle infinito de autorización:

function initialize() {
    var scope = 'http://docs.google.com/feeds/';

    if (google.accounts.user.checkLogin(scope)) {
        var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');   
        service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);  
    } else {
        var loginButton = $("<button>Click here to login</button>");
        loginButton.click(function() {
            var token = google.accounts.user.login(scope); // can ignore returned token  
        });
        $("body").append(loginButton);
    }
};  
​

Otros consejos

Tenga en cuenta que escribir código en el lado del servidor, que juega para un proxy y dejar jQuery llamarlo.

Se puede, siempre y cuando el dominio externo permite que mediante el envío de una cabecera Access-Control-Allow-Origin apropiado. Entonces sólo tiene que utilizar la API XMLHttpRequest en los navegadores que soportan la API de dominios cruzados XHR estándar y XDomainRequest en IE.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top