archivos mensuales: Enero 2015

HTTP 406 Error al utilizar $http.get Angular contra SharePoint resto puntos finales

Actualización: Marc AD ndersson señaló esta gran pieza de información: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-released/. Eso explica mucho :).

Nunca puede ser el peor título de una entrada de blog! ANYHOO.

Normalmente hago todos mis prototipos contra una instancia O365. Tengo mi instancia personal así que no tengo que estar preocupado de afectando a nadie. Como acotación al margen – recuerda cuando llamamos llevados alrededor de las máquinas virtuales en nuestros ordenadores portátiles con musgo – SQL Server, IIS, decidir vs Hyper-V. VMWare? En fin...

Había desarrollado una aplicación usando Angular en este entorno que hace, entre otras cosas, Esto:

$http.Get(serverUrl)
.éxito(función(datos, estado, cabeceras, config) {

var getLinksResponse = datos;

getLinksResponse.value.forEach(función(theResult) {

// y así sucesivamente y así producir espuma

Esto estaba trabajando muy bien en dos diferentes entornos en línea de SharePoint. Sin embargo, Cuando mi colega lo portado a una instancia de Cloudshare, Me estaba poniendo un HTTP 406 error (que fue la primera vez que he tenido esa, Así que... ¡ yay, Creo que sí). Hicimos un poco de investigación y notó que el encabezado de "Aceptar" estaba fuera de. Estaba perfectamente contento con SharePoint online:

Aceptar: application/json

Pero la instancia cloudshare (que es SP en prem, alojado en un servidor virtual) Quería que el clásico "odata = verbose" agregó también en:

Aceptar: application/json;OData = verbose

Para arreglar eso, Hemos añadido la rúbrica como tal:

var config = {cabeceras: {
'Aceptar': ' application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.éxito(función(datos, estado, cabeceras, config) {

var getLinksResponse = datos;

getLinksResponse.value.forEach(función(theResult) {

// y así sucesivamente y así producir espuma

Que se deshizo de la 406, pero también cambió el formato de la respuesta. Era más... detallado. (jaja!) Más cambios fueron necesarios y aquí está el resultado final:

var config = {cabeceras: {
'Aceptar': ' application/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.éxito(función(datos, estado, cabeceras, config) {

var getLinksResponse = datos;

getLinksResponse.d.results.forEach(función(theResult) {

// y así sucesivamente y así producir espuma

Esto sólo se convirtió en un 30 minuto problema para nosotros, así que suerte. Esperemos que alguien encuentra esta útil.

</final>

How-to: Habilitar múltiples piezas angulares Web de SharePoint en la misma página

Este blog posts describe cómo puedes tener múltiples Angular.js basado en elementos web de SharePoint (hace referencia a través de un elemento web editor de contenido) en la misma página. Yo estoy llamando a un elemento web editor de contenido (CEWP) que hace referencia JavaScript construido utilizando el framework de Angular.js un "elemento Web Angular".

Proceso de arranque de angular es súper fácil y cada ejemplo que encontrará el internets es algo como esto:

<HTML ng-app = 'myApp'>

<bla /><bla /><bla />

</HTML>

Esto se rompe, Sin embargo, Si desea habilitar múltiples CEWP que representa a varias partes de la web angular en la misma página. Angular se solamente automáticamente arranque contra la primera Directiva de ng-app se encuentra – por lo menos desde la versión angular 1.3.6. La solución es bastante simple – arranque manualmente el código en su lugar. Lo anterior ahora cambia a algo como esto:

<cuerpo>
<d
identificación IV =”bootstrapHere” ng-controlador =”myController como theController”>
<bla /><bla /><bla />
</div>
</cuerpo>

<script src =”//Ajax.googleapis.com/Ajax/libs/angularjs/1.3.6/angular.js”></secuencia de comandos>

<secuencia de comandos>
angular.bootstrap(angular.Element(Document.getElementById(“bootstrapHere”)),['myApp']);
</secuencia de comandos>

Básicamente, en lugar de utilizar ng-app sobre el elemento para hacer tu bootstrapping, que bofetada un ID a dicho elemento. A continuación, Utilice el bootstrap() método angular para controlar el arranque del proceso en tiempo de ejecución. He probado esto con tres partes web Angular diferente en la misma página y funciona de maravilla.

</final>

undefinedSuscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin