Categorie Archieven: JavaScript

HTTP 406 Fout bij het gebruik van hoekige $http.get tegen SharePoint REST eindpunten

Update: Marc AD ndersson om erop te wijzen dit grote stuk van info: http://blogs.Office.com/2014/08/13/JSON-Light-Support-rest-SharePoint-API-Released/. Dat verklaart veel :).

Dat is misschien wel de ergste titel van een blogpost ooit! Hoe dan ook.

Ik meestal doe alle van mijn prototyping tegen een O365 exemplaar. Ik heb mijn persoonlijke exemplaar, zodat ik niet hoef te worden bezorgd op het gebied van iemand anders. Als een terzijde-Onthoud wanneer wij uitgevoerd rond virtuele machines op onze laptops met mos-SQL Server, IIS, beslissende Hyper-V vs. VMWare? Hoe dan ook...

Ik had ontwikkeld een app gebruikt Angular in deze omgeving die doet, onder andere, Dit:

$http.Get(serverUrl)
.succes(functie(gegevens, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(functie(theResult) {

// en zo verder en zo schuim

Dit werkte prima in twee verschillende SharePoint online omgevingen. Echter, Toen mijn collega het ported aan de aanleg van een Cloudshare, Hij kreeg een HTTP 406 fout (die was de eerste keer dat ik ooit kreeg die ene, dus... yay, Denk ik). We heb een beetje van het onderzoek en merkte dat de "Accept" header uitgeschakeld was. SharePoint online was perfect gelukkig met:

Accepteren: application/json

Behalve het cloudshare exemplaar (Wat is SP op prem, gehost op een virtuele server) wilde de klassieke "odata = verbose" toegevoegd ook:

Accepteren: application/json;odata = verbose

Om dat te bevestigen, Wij toegevoegd de kop als zodanig:

var config = {headers: {
'Accepteren': ' application/json;odata = verbose'
}
};

$http.Get(serverUrl,config)
.succes(functie(gegevens, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(functie(theResult) {

// en zo verder en zo schuim

Die verlost van de 406, maar het ook de indeling van de reactie gewijzigd. Het was meer... uitgebreide. (haha!) Meer veranderingen nodig waren en hier is het eindresultaat:

var config = {headers: {
'Accepteren': ' application/json;odata = verbose'
}
};

$http.Get(serverUrl,config)
.succes(functie(gegevens, status, headers, config) {

var getLinksResponse = data;

getLinksResponse.d.Results.forEach(functie(theResult) {

// en zo verder en zo schuim

Dit alleen omgezet in een 30 minuut probleem voor ons, Dus wij lucked uit. Hopelijk vindt iemand dit nuttig.

</einde>

Hoekige mislukt om te bootstrappen in IE9

Ik been playing rond met Angular.js voor de laatste lang terwijl en voor het leven van me, Ik kon niet mijn hoekige apps te lanceren in IE9 krijgen.  Ze werken allemaal prima in IE11 maar IE9 zou enkel toont de accolades en soortgelijke bits.

Ik zocht rond en kon het niet vinden iemand klagen over zijn probleem.  Het werkte prima in Chrome, IE11, gewoon niet IE9.

Ik was gegooid uit door het feit dat de IE console gaf me fouten als dit:

SEC7111: HTTPS veiligheid in het gedrang komt door res://ieframe.dll/forbidframing.htm

Deze fout had me aan het denken was er één of ander probleem de hoekige downloaden of andere bibliotheken die ik nodig had.  Het blijkt dat, Dit was niet het probleem.

Door de internets rondneuzen, Ik heb eindelijk ontdekt dat de zin die ik nodig had om te zoeken naar "bootstrap" was en dat het leek alsof het bootstrappen was niet.  In het einde, mijn probleem was dat ik had versierd mijn <HTML> -tag waarvan het kenmerk ng-app, Als in:

<HTML-ng-app = "MatrixApp">

Goed, dat werkte niet voor IE9.  In plaats daarvan, Ik wikkelde de rest van de HTML-code in de <lichaam> binnen een div en verwijzingen MatrixApp die manier.

Probleem opgelost.

Hopelijk slaat dit iemand sommige verdriet.

</einde>

Groeiend bewustzijn / Aanneming van JavaScript-Frameworks

Mijn collega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), schreef een korte samenvatting blogpost op kaders hij houdt of op zijn minst met heeft geweest using met SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery lijkt te zijn de overwinnaar op het veld, bij wijze van spreken, jarenlang nu, maar de anderen zijn meer nieuwe en foto's sorteren van het vechten, zoals Angular. (SPServices, Natuurlijk, is een life saver jarenlang geweest en zal blijven worden dus ik denk dat).

Wat zijn mensen gebruiken? Ze zijn meer gericht op Microsofts tooling (CSOM / JSOM) of meer richting Angular verplaatsen, Knock-out, Sintel, etc?

Ik heb een groeiende vooroordeel richting van deze niet-Microsoft-kaders. Ik denk dat de MSFT spul is moeilijker en moeilijker om te werken met, die bijna net zo veel van het leren kromme als oude-stijl serverkant dev.

Post een commentaar hier of over ten Big Apple SharePoint Als u wilt bespreken (Big Apple zal hebben meer kans op een goede discussie).

</einde>

Overwinnen van vervelende probleem met relatieve URL's in SharePoint Quick Launch

Ik wilde een link toevoegen naar de vlug barkas navigatie de andere dag en SharePoint vertelde me:

image

Pure tekstversie van die is:

Ervoor zorgen dat de URL geldig is en met ofwel een geldig teken begint (een hekje (#) of schuine streep naar voren (/)) of een geldige ondersteund protocol (bijvoorbeeld, ' http://’, ' https://’, ' bestand://’, ' ftp://’, ' mailto:’, ' Nieuws:’).

"Blech en pox!"Ik zei.

Een alternerende actie aan dit is het gebruik van JavaScript te vinden van een bekende link in de werkbalk Snel starten en haar gedrag te overschrijven.

Om dit te testen, een nieuwe koppeling toevoegen aan uw testsite thusly:

image

Ik gebruikte jQuery. Te lossen, Krijg sommige JavaScript en jQuery naar de pagina met behulp van uw favoriete techniek en met een lijn van code zoals dit:

 

$(document).klaar( functie () {

    $("een:bevat('Test URL vervanging')").Klik op(functie () { waarschuwing("gewijzigde klik gedrag!"); terugkeer vals;});

});

En Bob's uw oom.

De jQuery selector vindt elke <een> label die "Test URL vervanging" in haar naam heeft. U kunt zoeken-melodie die afhankelijk van uw link en dergelijke.

De .Klik(functie() overschrijft wat SharePoint zou hebben gedaan wanneer de gebruiker heeft geklikt. Zorg ervoor dat u 'return false' of anders zal het doen van je spullen en dan proberen aan de href ding ook, Wat is vrijwel zeker niet uw doel.

Dit werd gedaan en test in een SharePoint online-omgeving maar moet werken goed in 2010 en eerder te.

</einde>

undefinedAbonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin

Arme Man de Caching in JavaScript

[TL;DR versie: gebruik van cookies voor het opslaan van de resultaten van asynchrone oproepen; de resultaten van afgelopen async oproepen onmiddellijk renderen en vervolgens valideren ze na het laden van de pagina.]

Ik heb gewerkt op SharePoint intranet-site voor een client die functies, onder andere, een gestileerde secundaire navigatie waarvan menu-opties worden beheerd via een regelmatige oude aangepaste lijst.  Het idee is dat de client krijgt om "hun" site systeemmenu zonder te tasten of wordt beïnvloed door de wereldwijde navigatie stak door het.

(Er is iets ongelooflijk subversieve over het toevoegen van een CEWP die verwijst naar een HTML-bestand dat ladingen sommige CSS en JS fundamenteel veranderen bijna alles over van een site probleem... maar dat is voor een andere post)

De code voor dit vrij eenvoudig:

De zere plek hier is dat elke keer als iemand hits een pagina van de site, webbrowser van die gebruiker is het bereiken uit om items uit de lijst.  Zodra dev voltooid is en dingen te testen heeft bewezen stabiel en voltooien, deze oproep is onnodig meer dan 99% van de tijd sinds het menu zelden verandert.  Heeft ook een raar UI invloed die gebruikelijk is in deze heerlijke nieuwe wereld van hyper-ajaxy websites-de pagina maakt en alleen dan heeft het menu maken.  Het is zenuwachtig en afleidend in mijn mening.  En zenuwachtig. Dus, opslaan in de cache. 

Ik heb gewijzigd de logica thusly:

  • Zoek naar een cookie in de browser die het menu bevat als ik laatst lezen
    • Als gevonden, maken het onmiddellijk.  Wacht niet op de pagina te laden voltooien.  (U moet ervoor zorgen dat uw HTML-code wordt strategisch geplaatst hier, maar het is niet moeilijk om te doen).
  • Wachten op de pagina te laden voltooien en maak een async oproepen voor vracht opwaarts menu-items uit een lijst met behulp van REST of lists.asmx of wat dan ook
  • Vergelijken wat ik heb tegen de cookie
    • Als het overeenkomt met, STOP
    • Anders, met behulp van jQuery, dynamisch vullen een bos als <Li>de in een <UL>
  • Gebruik CSS te doen alle opmaak
  • Winst!

Sommigen van u zullen zeggen, "hey! Er is geen echte in het voorgeheugen onderbrengende gaat hier omdat je het lezen van het menu hoe dan ook elke keer.”  En je hebt gelijk-ik ben niet het geven van de server elke soort pauze.  Maar omdat de oproep async is en gebeurt na de pagina's eerste HTML-nettolading volledig maakt, het voelt"" ontvankelijker voor de gebruiker.  Het menu maakt vrij veel als de pagina vestigt.  Als het menu aan de verandering gebeurt, de gebruiker is onderworpen aan een zenuwachtig opnieuw te tekenen van het menu, maar slechts die één keer.

Er zijn een aantal manieren aan deze cache doeltreffender maken en helpen de server op hetzelfde moment:

  • Zet in een regel dat de cache"cookie" geldig voor een minimum van is 24 uren of sommige andere tijdsbestek. Zolang er geen verlopen cookie is, gebruik van de cookie menu momentopname en nooit hit de server.

Nou... dat is alles wat die te binnen schieten nu :). 

Als iemand slimme ideeën hier heeft zou ik graag willen weten ze.

En tot slot – deze techniek kan worden gebruikt voor andere dingen.  Deze client pagina heeft een aantal data-gedreven dingen op verschillende pagina 's, velen van hen veranderen relatief zelden (zoals een keer per week of eenmaal per maand).  Als u zich richten op specifieke gebieden van functionaliteit, u kunt een meer responsieve UI geven door trekken inhoud uit de lokale cookie store en meteen renderen.  Het voelt sneller aan de gebruiker, zelfs als u niet de server elke cycli opslaat.  U kan Sla de server cycli door te besluiten op een aantal voorwaarden en triggers om deze lokale cookie cache ongeldig te maken.  Dat is allemaal situationele en kunstzinnige spullen en echt de leukste :). 

</einde>

undefinedAbonneren op mijn blog.

Volg mij op Twitter op http://www.twitter.com/pagalvin