2011-06-26 19 views
20

Quiero trabajar con backbone.js y jquery. Se supone que la aplicación se ejecuta sin conexión en teléfonos móviles (es decir, "localhost"), hay pocas llamadas en un lado del servidor back-end en Internet.backbone.js y cross domain scripting

¿Cuál es la mejor manera de realizar solicitudes de dominios cruzados con backbone.js?

Me gustaría usar JSON, pero eventualmente podría volver a REST si es necesario.

Aquí está mi código no es muy impresionante hasta el momento:

App.Collections.Events = Backbone.Collection.extend({ 
    model: Event,  
    url: 'http://mydomain.com/api/getevents/user_id/1/' 
}); 
+11

No estoy seguro Entiendo "Me gustaría usar JSON, pero eventualmente podría volver a REST si es necesario". - JSON y REST no son cosas, JSON es un formato para serializar datos en una cadena, REST es un patrón de interfaz de servicio web. Publicaré una respuesta y ajustaré si tienes alguna aclaración. – Stoive

Respuesta

38

Hay dos formas de permitir XMLHttpRequests entre dominios, que es el método Backbone.js utiliza para obtener los datos desde una URL. El primero es apropiado si tienes control del lado del servidor del dominio no originario al que intentas conectarte, e implica la implementación de Cross-Origin Resource Sharing (o CORS).

Para implementar CORS, devolver la pieza 'origen' del encabezado de solicitud HTTP Referer (el bit hasta el comienzo de la path, sino que debe coincidir con expresiones regulares ^.+?\/{2}[^\/]*) en la cabecera Access-Control-Allow-Origin respuesta de dominios que desea servir para:

Access-Control-Allow-Origin: http://mydomain.com 

Es posible que necesite anular Backbone.sync para que el right settings que se fijará en el objeto XMLHttpRequest.

La segunda opción, si no tiene acceso al servidor de origen cruzado, sería realizar un proxy de las solicitudes a través de su propio servidor (el de origen o el que habilita CORS). Obviamente, quien sea que tenga el dominio que está tratando de llamar puede no querer que lo haga, pero eso es por diseño: si no quiere que llame a su servicio, solo tienen una dirección IP para bloquear, en lugar de cada uno de sus IP de los clientes

+0

guau, eso fue simple! Gracias! :-) Para mí funcionaba por cierto con http://mydomain.com sin la barra – herrjeh42

+3

¡Sin problemas! Ahora, si esto cubre todo, márcalo como la respuesta correcta. Gracias :) – Stoive

+0

gracias por indicarme la función de "respuesta correcta", ¡Stoive! – herrjeh42

Cuestiones relacionadas