2011-05-17 13 views
12

Soy algo novato en javascript, pero estoy tratando de llamar a un servicio web JSON que requiere autenticación básica usando jQuery (o cualquier cosa que realmente funcione).¿Cómo se llama a un servicio web JSON, que requiere autenticación básica, usando jQuery?

No he podido encontrar ninguna respuesta real en Google. ¿Es lo que estoy tratando de hacer posible?

+0

Vea aquí un ejemplo: http://stackoverflow.com/questions/671042/using-javascript-with-the -twitter-api/671054 # 671054 –

+0

+1: gran pregunta; explora un aspecto de Ajax en el que nunca había pensado. –

+0

¿Se está ejecutando JavaScript en una página alojada en el mismo dominio que el servicio web? –

Respuesta

10

Deberá configurar el encabezado de solicitud apropiado para pasar las credenciales. Por ejemplo, vea here.

$.getJSON({ 
    'url': 'http://host.com/action/', 
    'otherSettings': 'othervalues', 
    'beforeSend': function(xhr) { 
     //May need to use "Authorization" instead 
     xhr.setRequestHeader("Authentication", 
      "Basic " + encodeBase64(username + ":" + password) 
    }, 
    success: function(result) { 
     alert('done'); 
    } 
}); 

FYI busqué en Google de jquery post with basic auth y este fue el primer enlace.

+0

encodeBase64 solo se convierte a la base 64. El nombre de usuario y la contraseña se envían básicamente en texto claro. – bleepzter

+4

Correcto, así es como funciona la autenticación básica. Tampoco lo recomendaría, pero es lo que pidió el OP. – mellamokb

+3

puede usar https en lugar de http, entonces no será texto claro – beetstra

-4

Simple.

En asp.net crea una referencia al servicio. Cree una página web (sin IU) y cree varios métodos en el código que sean "contenedores" para ese servicio (en C#/VB.NET). Decore los métodos con [WebMethod] y establezca Serialización de WebMethod en JSON.

O bien, puede hacer lo mismo con cualquier otro idioma (pearl, php, lo que sea) creando un contenedor para el servicio web json.

La razón por la que necesita esa envoltura es porque de esa manera se evitan las limitaciones de secuencias de comandos entre sitios ... en JS. Además, si su página se sirve a través de HTTPS, entonces sus llamadas JS a su contenedor también serán a través de HTTPS, por lo que no tendrá que preocuparse por la seguridad.

Su envoltorio JS se hace cargo de la negociación de la conexión, autenticación, etc ...

El javascript dentro de sus otras páginas Publicación de los métodos en esta página como:

$.post('pagename/method_name', {data:value}, callback(){ 

}); 

o $ .post, $ .get, $ .ajax ... todo funcionará.

+4

-1: no atiende la pregunta. El OP no hizo referencia a las tecnologías del lado del servidor. –

+0

@bleepzter: Whoa, amigo. ¡Relajarse! Aquí tienes una buena respuesta, pero puede no ser necesaria para el escenario del PO.Sé cómo te sientes, pero tengo bastantes respuestas debajo de mi cinturón con un '-1'. Está bien, es parte del proceso de aprendizaje, está bien. Aguanta :) – mellamokb

+0

bleepzter - Honestamente, tendrás dificultades en este trabajo si no puedes criticar un poco. 2 puntos de internet apenas valen la pena. – Kobi

7

Aquí está la manera de hacerlo con jQuery para sus necesidades de copia y pegar:

$.ajax({ 
    url: "/somewhere", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "Basic " + window.btoa(username + ":" + password)); 
    }, 
    success: function(result) { 
     console.log(arguments); 
    } 
}); 
Cuestiones relacionadas