Kategoriarkiv: JavaScript

HTTP 406 Feil ved kantete $http.get mot SharePoint resten endepunkt

Oppdateringen: Marc AD ndersson påpekt denne store stykke informasjon: http://blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-Released/. Det forklarer mye :).

Det kan være verste tittelen på et blogginnlegg noensinne! Anyhoo.

Jeg vanligvis gjør alle mine prototyping mot en O365-forekomst. Jeg har min personlige forekomst slik at jeg ikke trenger å være bekymret påvirker andre. Som en side-Husk når vi kaller båret rundt virtuelle maskiner på vår bærbare med MOSS-SQL Server, IIS, bestemme Hyper-V vs. VMWare? Anyhoo...

Jeg hadde utviklet en app med Angular i dette miljøet som gjør, blant annet, Dette:

$http.Get(serverUrl)
.suksess(funksjonen(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funksjonen(theResult) {

// og så videre og så skum

Dette arbeidet rettferdig fin i to forskjellige SharePoint online miljøer. Men, Når min kollega portet den til en Cloudshare, Han fikk en HTTP 406 feil (som var første gang jeg noen gang fikk den, så... yay, jeg tror det). Vi gjorde litt research og la merke til at overskriften "Godta" var av. SharePoint online var helt fornøyd med:

Godta: programmet/json

Men cloudshare forekomsten (SP er på prem, vert for en virtuell server) ville klassiske "odata = utførlig" lagt i tillegg:

Godta: programmet/json;OData = detaljert

Å fastsette det, vi lagt til overskriften slik:

var config = {overskrifter: {
'Akseptere': "program/json;OData = utførlig '
}
};

$http.Get(serverUrl,config)
.suksess(funksjonen(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funksjonen(theResult) {

// og så videre og så skum

Som ble kvitt den 406, men det også endret formatet på svaret. Det var mer... detaljert. (haha!) Flere endringer er nødvendig og her er resultatet:

var config = {overskrifter: {
'Akseptere': "program/json;OData = utførlig '
}
};

$http.Get(serverUrl,config)
.suksess(funksjonen(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.d.results.forEach(funksjonen(theResult) {

// og så videre og så skum

Dette bare omgjort til en 30 minutt problem for oss, så vi lucked ut. Forhåpentligvis finner noen dette nyttig.

</slutten>

Kantete mislykkes bootstrap i IE9

Jeg har spilt med Angular.js siste lenge og for livet av meg, Jeg kunne ikke få min kantete programmer å lansere i IE9.  Alle fungerer fint i IE11 men IE9 vil bare vise klammeparenteser og lignende biter.

Jeg søkte rundt og kunne ikke finne noen klager om hans problem.  Den arbeidet fin inne Chrome, IE11, bare ikke IE9.

Jeg ble kastet ut av det faktum at IE konsollen ga meg feil som dette:

SEC7111: HTTPS sikkerhet er kompromittert av res://ieframe.dll/forbidframing.htm

Denne feilen fikk meg tenking det var en problem dataoverfører vinkelgiret eller andre biblioteker som jeg trengte.  Som det viser seg, Dette var ikke problemet.

Ved poking rundt internets, Jeg endelig fant ut at uttrykket jeg måtte søke etter var "bootstrap" og at det virket som bootstrapping var sviktende.  Til slutt, mitt problem var at jeg hadde ukontrollert min <HTML> kode med attributtet ng-app, som i:

<HTML ng-app = "MatrixApp">

Brønnen, det gjorde ikke arbeide for IE9.  I stedet, Jeg pakket resten av HTML i den <kroppen> inne i en div og referanser MatrixApp måten.

Problem løst.

Forhåpentligvis sparer dette noen litt sorg.

</slutten>

Økende bevissthet / Adopsjon av JavaScript rammer

Min kollega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), skrev et kort sammendrag blogginnlegg på rammer han liker eller minst har vært med med med SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery synes å ha vært victor på feltet, så å si, for år nå, men de andre er flere nye og stillbilder slags kjemper, som Angular. (SPServices, selvfølgelig, har vært en livet sparer i år og vil fortsette å være så jeg tror).

Hva folk bruker? De er fokusert mer på Microsofts verktøy (CSOM / JSOM) eller flytte mer mot Angular, Knockout, Aske, osv.?

Jeg har en voksende bias mot disse ikke-Microsoft-rammer. Jeg tror ting som MSFT er vanskeligere og vanskeligere å arbeide med, krever nesten like mye av læringskurve som gammel stil serversiden dev.

Legge inn en kommentar her eller over på Big Apple SharePoint Hvis du vil diskutere (Big Apple får mer sannsynligheten for en god diskusjon).

</slutten>

Overvinne irriterende Problem med Relative URL-adresser i Hurtigstart på SharePoint

Jeg ønsket å legge en link til hurtigstartlinjen navigasjon forleden og SharePoint fortalte:

image

Ren tekst-versjon som er:

Kontroller at URL-adressen er gyldig og begynner med enten et gyldig tegn (et nummertegn (#) eller skråstrek (/)) eller en gyldig støttet protokoll (for eksempel, ' http://’, ' https://’, ' fil://’, ' ftp://’, ' mailto:’, ' nyheter:’).

"Blech og pox!"Jeg sa.

En løsning på dette er å bruke JavaScript til å finne en kjent kobling i Hurtigstart og overstyre virkemåten.

Å teste dette, legge til en ny kobling til webområdet test thusly:

image

Jeg brukte jQuery. Du kan løse det., få noen JavaScript og jQuery på siden ved å bruke ditt favorittmetoden og med en linje med kode som dette:

 

$(dokumentet).klar( funksjonen () {

    $("en:inneholder("Test URL erstatning")").Klikk(funksjonen () { varsel("endrede Klikk virkemåte!"); avkastning USANN;});

});

Og Bob er din onkel.

JQuery velgeren finner alle <en> kode som har "Test URL erstatning" i navnet. Du kan finne-låt som avhengig av koblingen og slike.

Klikk(funksjonen() overstyrer hva SharePoint ville ha gjort når brukeren klikker. Sikre du "return false" eller ellers det vil gjøre ting og deretter prøve på href ting også, som er nesten helt sikkert ikke målet ditt.

Dette ble gjort og test i en SharePoint online-miljøet, men skal fungere godt i 2010 og tidligere for.

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin

Fattig mann er hurtigbufring i JavaScript

[TL;DR versjon: Bruk informasjonskapsler til å lagre resultatene av asynkrone samtaler; gjengi resultatet av siste asynkrone samtaler umiddelbart og deretter validere dem etter sideinnlastingen.]

Jeg har jobbet på SharePoint intranettområde for en klient som har, blant annet, en stilisert sekundær navigasjon som menyalternativer administreres via en vanlig gamle egendefinert liste.  Tanken er at klienten får Kontrollmenyen "sine" området uten å påvirke eller blir påvirket av global navigasjon satt ut av det.

(Det er noe utrolig samfunnsnedbrytende om å legge til en CEWP som peker til en HTML-fil som laster noen CSS og JS fundamentalt endre nesten alt om nettstedets oppførsel... men det er for en annen post)

Koden for denne pen enkel:

Sår spot her er at hver gang noen treff en av områdets sider, brukerens web-leser er nå for å få elementer fra listen.  Når dev er fullført og testing har vist ting å være stabil og fullføre, Denne samtalen er unødvendig mer enn 99% tiden siden menyen sjelden endres.  Det har også en merkelig UI innvirkning som er vanlig i denne brave new world av hyper-ajaxy nettsteder-siden gjør og deretter gjengir menyen.  Det er nervøs og forstyrrende i min mening.  Og nervøs. Så, hurtigbufring. 

Jeg endret logikken thusly:

  • Se etter en informasjonskapsel i nettleseren som inneholder menyen som jeg sist leste det
    • Hvis funnet, gjøre det umiddelbart.  Ikke vent til siden å slutten lessing.  (Du må kontrollere at HTML er strategisk plassert her, men det er ikke vanskelig å gjøre).
  • Vent til siden å slutten lessing og lage en asynkron behøve laste opp elementer fra en liste med resten eller lists.asmx eller hva
  • Sammenligne hva jeg fikk mot cookie
    • Samsvarer med, stopp
    • Ellers, hjelp jQuery, dynamisk fylle en haug hvis <Li>er i en <UL>
  • Bruk CSS til all formatering
  • Fortjeneste!

Noen av dere skal si, "Hei! Det er ingen reell skjulested vei her siden du leser menyen allikevel hver eneste gang.”  Og du har rett-jeg gi ikke serveren alle slags pause.  Men fordi samtalen er asynkrone og skjer etter siden første HTML nyttelast gjengir fullt, det føles"" mer mottagelig for brukeren.  Menyen gjør ganske mye som siden trekker.  Hvis menyen skjer endringen, brukeren er utsatt for en nervøs re-trekning av menyen, men den ene gangen.

Det er noen måter å gjøre dette hurtigbufring mer effektiv og hjelpe til serveren samtidig:

  • Innlegge en regel at "cookie cache" er gyldig i minst 24 timer eller noen andre tidsramme. Så lenge det er ingen opphøre koke, Bruk informasjonskapselen menyen bilde og aldri truffet serveren.

Vel... det er alt som kommer til hjernen akkurat nå :). 

Hvis noen har noen smarte ideer her ville jeg elske å kjenne dem..

Og til slutt-denne teknikken kan brukes til andre ting.  Denne klienten siden har en rekke data-drevet ting på forskjellige sider, mange av dem endre relativt sjelden (som en gang i uken eller en gang i måneden).  Hvis du målrette bestemte områder av funksjonalitet, Du kan gi en mer responsiv UI ved å trekke innhold fra lokale cookie store og gjengivelse umiddelbart.  Det føles raskere til brukeren selv om du ikke lagrer serveren noen sykluser.  Du kan Lagre server sykluser med å beslutter på noen betingelser og utløsere å oppheve denne lokale cookie cache.  Det er alle situasjonsforståelse og fancy ting og virkelig det morsomste :). 

</slutten>

undefinedAbonner på bloggen min.

Følg meg på Twitter på http://www.twitter.com/pagalvin