Kategori Arkiv: JavaScript

HTTP 406 Fejl når du bruger kantede $http.get mod SharePoint resten slutpunkter

Opdatering: Marc AD ndersson påpegede dette store stykke af info: http://Blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-Released/. Det forklarer en masse :).

Det kan være den værste titlen på et blog-indlæg nogensinde! Anyhoo.

Jeg typisk gøre alle mine prototyping mod en O365-forekomst. Jeg har min personlige instans, så jeg ikke behøver at være bekymret om påvirker alle andre. Som en sidebemærkning--huske, når vi kalder udført omkring virtuelle maskiner på vores bærbare computere med mos-SQL Server, IIS, besluttende Hyper-V vs. VMWare? Anyhoo...

Jeg havde udviklet en app ved hjælp af kantede i dette miljø, der gør, blandt andet, Dette:

$http.get(serverUrl)
.succes(funktion(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funktion(Myndigheden) {

// og så videre og så skum

Det virkede fint i to forskellige SharePoint online miljøer. Dog, Når min kollega porteret det til en forekomst af Cloudshare, Han fik en HTTP 406 fejl (der var første gang jeg nogensinde fik at man, så... yay, Jeg gætter). Vi gjorde en smule forskning og bemærket, at overskriften "Acceptere" var off. SharePoint online var helt tilfreds med:

Acceptere: ansøgning/json

Men cloudshare forekomsten (der er SP på prem, hostet i en virtuel server) ønskede klassiske "odata = verbose" tilføjet i samt:

Acceptere: ansøgning/json;OData = verbose

Hen til lave at, vi tilføjede i hovedet som sådan:

var config = {overskrifter: {
'Acceptere': «ansøgning/json;OData = verbose'
}
};

$http.get(serverUrl,config)
.succes(funktion(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funktion(Myndigheden) {

// og så videre og så skum

Der fik befri for den 406, men det også ændret format af respons. Det var mere... verbose. (haha!) Flere ændringer var nødvendige og her er det endelige resultat:

var config = {overskrifter: {
'Acceptere': «ansøgning/json;OData = verbose'
}
};

$http.get(serverUrl,config)
.succes(funktion(data, status, overskrifter, config) {

var getLinksResponse = data;

getLinksResponse.d.Results.forEach(funktion(Myndigheden) {

// og så videre og så skum

Dette kun forvandlet til et 30 minut problem for os, så vi lucked ud. Forhåbentlig finder nogen dette nyttigt.

</slutningen>

Kantede undlader at Bootstrap i IE9

Jeg har leget med Angular.js til sidst lange mens og for livet af mig, Jeg kunne ikke få min Kantede apps at lancere i IE9.  De alle fungerer fint i IE11 men IE9 ville bare vise krøllede klammeparenteser og lignende bits.

Jeg søgte rundt og kunne ikke finde nogen klager over hans problem.  Det virkede fint i Chrome, IE11, bare ikke IE9.

Jeg blev smidt ud af det faktum, at IE konsollen gav mig fejl som denne:

SEC7111: HTTPS sikkerhed er kompromitteret af res://ieframe.dll/forbidframing.htm

Denne fejl havde jeg tænkte der var nogle problemer med at downloade den kantede eller andre biblioteker, som jeg havde brug for.  Da det viser sig, Dette var ikke spørgsmålet.

Af poking omkring internets, Jeg endelig fandt ud af at den sætning, jeg havde brug for at søge efter var "bootstrap" og at det virkede som de bootstrapping var svigtende.  I sidste ende, mit problem var at jeg havde pyntet min <HTML> Tag med attributten ng-app, som i:

<HTML-ng-app = "MatrixApp">

Godt, det virkede for IE9.  I stedet, Jeg har pakket alle resten af HTML i den <kroppen> inde i en div og referencer MatrixApp måde.

Problem løst.

Forhåbentlig sparer dette nogen nogle sorg.

</slutningen>

Voksende bevidsthed / Vedtagelse af JavaScript rammer

Min kollega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), skrev et kort sammendrag blog-indlæg på rammer han kan lide eller i det mindste har været bruger med med SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery synes at have været victor på feltet, så at sige, for år nu, men de andre er nye og stills slags kæmper det, ligesom kantede. (SPServices, Selvfølgelig, har været et liv saver i år og vil fortsat være så jeg tror).

Hvad bruger folk? De fokuserer mere på Microsofts værktøjer (CSOM / JSOM) eller bevæger sig mere mod kantede, Knockout, Aske, osv?

Jeg har en voksende bias mod disse ikke-Microsoft rammer. Jeg tror MSFT ting er sværere og sværere at arbejde med, kræver næsten lige så meget af indlæringskurven som gammeldags serverside-dev.

Skriv en kommentar her eller over på Big Apple SharePoint Hvis du ønsker at diskutere (Big Apple vil have mere sandsynligheden for en god Diskussion).

</slutningen>

Overvinde irriterende Problem med Relative URL-adresser i SharePoint rask indlede

Jeg ønskede at tilføje et link til hurtig start navigation forleden og SharePoint fortalte mig:

image

Ren tekstversion af der er:

Sikre, at Webadressen er gyldig og begynder med enten et gyldigt tegn (et nummertegn (#) eller skråstreg (/)) eller en gyldig understøttet protokol (for eksempel, ' http://’, ' https://’, ' fil://’, ' ftp://’, ' mailto:’, «Nyheder:’).

"Blech og pox!"Jeg sagde.

En løsning til dette er at bruge JavaScript til at finde en kendt link i den rask indlede og tilsidesætte sin opførsel.

At teste dette, føje et nyt link til webstedet test thusly:

image

Jeg brugte jQuery. At løse det, få nogle JavaScript og jQuery til siden ved hjælp af din foretrukne teknik og med en linje kode på denne:

 

$(dokument).klar til( funktion () {

    $("en:indeholder("Test URL udskiftning")").Klik på(funktion () { alarm("ændrede Klik adfærd!"); tilbagevenden falsk;});

});

Og Bob er din onkel.

JQuery selector finder hver <en> Tag, der har "Test URL udskiftning" i sit navn. Du kan finde-tune, afhængigt af din link og sådan.

Af .click(funktion() tilsidesætter uanset SharePoint ville have gjort, når brugeren klikker på. Sørg for, at du "returnerer false" eller andet, det vil gøre dit kram og derefter prøve at href ting også, der er næsten helt sikkert ikke dit mål.

Dette blev gjort og test i et SharePoint online miljø men bør arbejde godt i 2010 og tidligere for.

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Fattig mand Caching i JavaScript

[TL;DR version: Brug cookies til at gemme resultaterne af async opkald; gengive resultaterne af tidligere async opkald straks og derefter validere dem efter side-belastning.]

Jeg har arbejdet på SharePoint intranet site for en klient at funktioner, blandt andet, en stiliseret sekundær navigation hvis menuindstillinger styres via en almindelig gamle brugerdefineret liste.  Ideen er at klienten får lov til at kontrollere menuen "deres" websted uden at påvirke eller påvirkes af den globale navigation sat ud af det.

(der er noget utrolig undergravende om tilføjelse af en CEWP, der peger på en HTML-fil for at indlæse nogle CSS og JS fundamentalt ændre næsten alt om et websteds opførsel... men det er for en anden post)

Koden for denne smukke enkle:

Den sore spot her er, at hver gang nogen hits en af webstedets sider, brugerens webbrowser er at nå ud til at få elementer på listen.  Når dev er komplet og test har bevist ting at være stabil og komplet, denne indkaldelse er unødvendige mere end 99% tid siden menuen sjældent ændres.  Det har også en underlig UI indflydelse, som er almindeligt i denne fagre nye verden af hyper-ajaxy websteder – siden renders og først derefter gør menuen.  Det er nervøs og distraherende efter min mening.  Og nervøs. Så, cachelagring. 

Jeg har ændret logikken thusly:

  • Kigge efter en cookie i den browser, der indeholder menuen, som jeg sidst læste det
    • Hvis fundet, gøre det straks.  Vent ikke til siden for at afslutte læsning.  (Du skal sørge for din HTML er strategisk placeret her, men det er ikke svært at gøre).
  • Vente på siden for at afslutte lastning og gøre en asynkron hidkalde hen til ladning oppe menu artikler på en liste ved hjælp af resten eller lists.asmx eller hvad
  • Undersøg hvad jeg fik mod cookie
    • Hvis det passer, Stop
    • Ellers, ved hjælp af jQuery, dynamisk udfylde en bunke, hvis <Li>er i en <UL>
  • Brug CSS til at gøre al formatering
  • Profit!

Nogle af jer vil sige, "hey! der er ingen reel caching vej på her, da du læser menuen alligevel hver eneste gang.”  Og du har ret-jeg vil ikke give serveren nogen form for pause.  Men fordi opkaldet er asynkrone og sker efter siden 's oprindelige HTML nyttelast gengiver fuldt, det føles"" mere lydhøre over for brugeren.  Menuen gør temmelig meget som siden trækker.  Hvis menuen sker til ændringen, brugeren er udsat for en nervøs re-drage i menuen, men kun denne ene gang.

Der er nogle måder at gøre dette caching mere effektivt og hjælpe serveren på samme tid:

  • Sat i en regel at "cookie-cache" er gyldig i mindst 24 timer eller nogle andre tidsramme. Så længe der er ingen udløbet cookie, bruge den cookie menuen øjebliksbillede og aldrig ramte serveren.

Tja... det er alt, der kommer til at tænke lige nu :). 

Hvis nogen har nogen kloge tanker her ville jeg elske at kende dem.

Og endelig – denne teknik kan bruges til andre ting.  Denne klient side har en række datastyrede ting på forskellige sider, mange af dem ændre relativt sjældent (ligesom en gang om ugen eller en gang om måneden).  Hvis du er målrettet mod specifikke områder af funktionalitet, Du kan give en mere lydhør UI ved at trække indholdet fra den lokale cookie butik og rendering straks.  Det føles hurtigere til brugeren selv hvis du ikke gemmer serveren enhver cyklusser.  Du kan Gem serveren cyklusser ved at beslutte på visse betingelser og udløsere til at afkræfte denne lokale cookie cache.  Det er alle situationsbestemt og kunstnerkvarteret ting og virkelig den mest sjov :). 

</slutningen>

undefinedAbonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin