Arxius de la categoria: JavaScript

HTTP 406 Error quan s'utilitza $http.get Angular contra SharePoint resta punts finals

Actualització: Marc d'anunci ndersson assenyalar aquesta gran peça d'informació: http://Blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. Que explica molt :).

Que pot ser el pitjor títol d'una entrada de blog mai! Anyhoo.

Solen fer tota la meva prototipatge contra una instància de O365. Tinc el meu exemple personal per tal que no ha de preocupar per afectar a ningú més. Com acotació al marge – recordeu quan anomenem realitzades al voltant de màquines virtuals en nostres portàtils amb molsa-SQL Server, L'IIS, decidir Hyper-V contra. VMWare? Anyhoo...

Jo havia desenvolupat una aplicació utilitzant Angular en aquest entorn que fa, entre altres coses, això:

$http.Get(URLServidor)
.èxit(funció(dades, l'estat, capçaleres, config) {

var getLinksResponse = dades;

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

// i així successivament i així escuma

Això estava treballant just bé en dos diferents SharePoint entorns en línia. No obstant això, Quan el meu col lega portat-lo a una instància de Cloudshare, ell estava aconseguint un HTTP 406 error (que era la primera vegada que mai arribava aquell, Així que... yay, Suposo que). Vam fer una mica de recerca i s'adonava que l'encapçalament "Accepta" era fora. Era molt feliç amb SharePoint en línia:

Acceptar: aplicació/json

Però l'exemple cloudshare (que és SP en prem, allotjat en un servidor virtual) volia el clàssic "odata = verbosa" afegit en, així:

Acceptar: aplicació/json;OData = depuraci ≤

D'arreglar allò, Hem afegit la capçalera com a tal:

var config = {capçaleres: {
"Accepta": ' aplicació/json;OData = depuraci ≤ "
}
};

$http.Get(URLServidor,config)
.èxit(funció(dades, l'estat, capçaleres, config) {

var getLinksResponse = dades;

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

// i així successivament i així escuma

Que es va desfer de la 406, però també va canviar el format de la resposta. Es tractava més aviat... detallat. (Haha!) Calien canvis més i aquí està el resultat final:

var config = {capçaleres: {
"Accepta": ' aplicació/json;OData = depuraci ≤ "
}
};

$http.Get(URLServidor,config)
.èxit(funció(dades, l'estat, capçaleres, config) {

var getLinksResponse = dades;

getLinksResponse.d.Results.forEach(funció(theResult) {

// i així successivament i així escuma

Això només es va convertir en un 30 minut problema per a nosaltres, així ens va tenir sort a. Esperançadorament algú es troba aquesta útil.

</final>

Angular falla en arrencar a IE9

He estat jugant al voltant amb Angular.js per a l'últim llarg mentre i per a la vida de mi, NO podria aconseguir meus apps per llançar en IE9 Angular.  Tots ells treballen bé en IE11 però IE9 només mostraria les claus i trossos similars.

He buscat al voltant i no podria trobar qualsevol queixar-se sobre el seu problema.  Funcionava bé a Chrome, IE11, no només IE9.

Va ser expulsats pel fet que la consola IE m'estava donant errors com aquest:

SEC7111: Seguretat HTTPS està compromesa per resolució://ieframe.dll/forbidframing.htm

Aquell error em va fer pensar que hi havia algun problema descarregant l'angular o altres biblioteques que necessitava.  Com a resultat, això no era el problema.

Els estrenyent al voltant de l'internets, Finalment esbrinava que la frase que necessitava buscar era "arrencada" i que semblava que el encebant estava fallant.  Al final, el meu problema era que havia decorat la meva <HTML> etiqueta amb l'atribut ng-app, com a:

<HTML ng-app = "MatrixApp">

Pou, allò no funcionava per IE9.  En canvi, Embolica tota la resta de l'HTML en el <cos> dins d'un div i referències MatrixApp d'aquesta manera.

Problema resolt.

Esperançadorament algú això estalvia una mica de dolor.

</final>

Consciència creixent / Adopció de marcs de JavaScript

El meu col lega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), va escriure una entrada de blog curt resum marcs ell li agrada, o almenys ha estat utilitzant amb SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery sembla haver estat el vencedor en l'àmbit, per dir-ho, durant anys ara, però els altres són més noves i alambins una mena de batallant, com Angular. (SPServices, clar, ha estat un salvavides durant anys i seguirà sent així que crec que).

Què gent utilitzant? Es centren més en utillatges de Microsoft (CSOM / JSOM) o movent més cap a Angular, Vuitens de final, Brasa, etc?

Tinc un biaix creixent cap a aquests marcs no-Microsoft. Crec que les coses MSFT és més difícil i més difícil de treballar amb, ocupar gairebé com gran part de la corba d'aprenentatge com a estil antic servidor dev.

Envia un comentari aquí o més vigent en Gran Poma SharePoint Si vostè vol discutir (Gran Poma tindran més probabilitat d'un bon debat).

</final>

Superar el problema molest amb la URL relativa en llanxa ràpida del SharePoint

Volia afegir un enllaç a la llanxa ràpida navegació l'altre dia i em va dir SharePoint:

image

Versió només text pur d'això és:

Garantir que l'URL és vàlida i comença amb qualsevol un caràcter vàlid (un símbol de nombre (#) o barra inclinada (/)) o un protocol vàlid admesos (per exemple, ' http://’, ' https://’, "arxiu://’, ' ftp://’, "mailto:’, ' Notícies:’).

"Blech i pox de!"Jo vaig dir.

Un workaround per això és utilitzar JavaScript per trobar un enllaç conegut a la llanxa ràpida i substituir el seu comportament.

Per provar això, afegir un nou enllaç al seu lloc de prova així:

image

He fet servir jQuery. Per solucionar-lo, obtenir alguns JavaScript i jQuery a la pàgina utilitzant el seu favorit tècnica i amb una línia de codi com aquest:

 

$(document).preparat( funció () {

    $("un:conté('Prova substitució URL')").feu clic a(funció () { alerta("clic canviat de comportament!"); retorn fals;});

});

I el teu oncle Bob.

El selector de jQuery es troba cada <un> l'etiqueta que ha "Substitució de la prova d'URL" en el seu nom. Pot voler trobar sintonia que depenent del seu enllaç i tal.

El feu clic(funció() Substitueix el SharePoint hauria fet quan fa clic a l'usuari. Assegureu-vos que vostè "return false" o bé es fer les teves coses i llavors tractar la cosa href massa, que és gairebé naturalment no el teu objectiu.

Això va ser fet i prova en un entorn en línia SharePoint sinó que funcionen bé a 2010 i abans també.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

Home pobre de memòria cau en JavaScript

[TL;DR versió: utilitza cookies per emmagatzemar els resultats de les trucades asíncrona; representar els resultats dels darrers asíncrona trucades immediatament i validar-los llavors després de càrrega de pàgina.]

He estat treballant en lloc d'intranet del SharePoint per a un client que inclou, entre altres coses, una estilitzada Navegació secundària les opcions del menú són gestionats mitjançant una llista personalitzada vell regular.  La idea és que el client obté controlar el menú del "seu" lloc sense afectar o estar afectat per la navegació per.

(hi ha alguna cosa increïblement subversiu sobre com afegir un CEWP que apunta a un fitxer HTML que carrega alguns CSS i JS per alterar fonamentalment gairebé tot sobre el comportament d'un lloc... però això és per a un altre lloc)

El codi per a aquesta força simples:

L'adolorit lloc aquí és que cada vegada que algú colpeja una de les pàgines del lloc, navegador web de l'usuari és arribar a tenir elements de la llista.  Un cop dev és completa i proves ha demostrat coses de ser estable i complet, Aquesta convocatòria és innecessari més de 99% de l'època ja que poques vegades la carta canvia.  També disposa d'un estrany efecte UI que és comú en aquest món nou i valent de llocs web hiper-ajaxy-rendeix la pàgina i llavors només fa rendir el menú.  És nerviós i distracció en la meva opinió.  I nerviós. Així, memòria cau. 

He modificat la lògica així:

  • Buscar una galeta al navegador que conté el menú com darrera llegir-lo
    • Si hem trobat, representar-lo immediatament.  No esperi per a acabar de carregar la pàgina.  (Vostè necessita assegurar-se que el seu HTML estratègicament situat aquí, però no és difícil de fer).
  • Espereu que la pàgina d'acabar de carregar i fer un asíncrona truqueu per carregar els elements de menú d'una llista, utilitzant la resta o lists.asmx o el que sigui
  • Comparar què aconseguia contra la galeta
    • Si coincideix amb el, PARADA
    • En cas contrari, utilitzant jQuery, poblar dinàmicament un grapat de si <li>és en una <ul>
  • Utilitzar CSS per fer tot el format
  • Benefici!

Alguns de vostès estan anant a dir, "Escolta! no hi ha cap veritable memòria cau passant aquí ja que vostè està llegint la carta de totes maneres cada vegada.”  I tens raó-no estic donant el servidor cap mena de descans.  Però perquè la crida és asíncrona i passa després la pàgina inicial càrrega HTML totalment rendeix, "se sent" més sensible a l'usuari.  El menú rendeix força tant com dibuixa la pàgina.  Si el menú passa al canvi, l'usuari se sotmet a un nerviós repetir el sorteig del menú, però només que una vegada.

Hi ha algunes maneres de fer aquesta memòria cau més eficaç i ajudar el servidor al mateix temps:

  • Posar en una regla que el "amagatall de galetes" és vàlida per un mínim de 24 hores o algun timeframe altre. Mentre no hi ha galetes expirats, utilitzar instantània de la galeta menú i mai va colpejar el servidor.

Bé... això és tot el que vénen a la ment ara mateix :). 

Si algú té alguna idea intel ligent aquí jo estimaria saber-los.

I finalment – aquesta tècnica pot ser utilitzat per altres coses.  Pàgina del aquest client té una sèrie de coses basades en dades sobre diferents pàgines, molts d'ells canviar relativament poques vegades (com un cop per setmana o un cop al mes).  Si la destinació de les àrees específiques de funcionalitat, es pot donar un UI més sensible per tirant contingut des de la botiga local de galeta i rendició immediatament.  Que se sent més ràpid a l'usuari fins i tot si vostè no els està salvant el servidor qualsevol cicles.  Vostè pot salvar els cicles de servidor per decidir sobre algunes condicions i factors desencadenants que invalida aquest amagatall de galetes local.  Això és tot situacional i artístic matèria i realment el més divertit :). 

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin