Arhive de categorii: JavaScript

HTTP 406 Eroare atunci când se utilizează unghiulară $http.get împotriva SharePoint restul sfârşitul puncte

Actualizare: Marc AD ndersson a subliniat această bucată mare de informaţii: http://blogs.Office.com/2014/08/13/JSON-Light-support-rest-SharePoint-API-released/. Care explică mult :).

Care ar putea fi mai rău titlul un blog post vreodată! Anyhoo.

De obicei face tot de meu prototipuri împotriva o instanta O365. Am meu instanţă personale, astfel încât nu trebuie să fie îngrijorat de oricine altcineva care afectează. Ca o deoparte-amintesc când am apel efectuate în jurul maşinilor virtuale pe laptop-urile noastre cu muşchi – SQL Server, IIS, se decide Hyper-V vs. VMWare? Anyhoo...

Am dezvoltat un app folosind unghiulară în acest mediu care face, Printre alte lucruri, Acest lucru:

$http.get(serverUrl)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.value.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Acest lucru a fost de lucru bine în două medii diferite SharePoint online. Cu toate acestea, când colegul meu l-a portat la o instanţă de Cloudshare, El a fost obtinerea o HTTP 406 eroare (care a fost prima dată am ajuns vreodată că unul, Deci... yay, bănuiesc). Am facut un pic de cercetare şi am observat că antetul "Accepta" a fost oprit. SharePoint online a fost perfect fericit cu:

Accepta: cerere/json

Dar instanta cloudshare (care este SP prem, Găzduit într-un server virtual) vrut clasic "odata = verbose" adăugat în, precum şi:

Accepta: cerere/json;Odata = verbose

Pentru a stabili că, am adăugat antetul ca atare:

var config = {anteturi: {
"Accept": ' cerere/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.value.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Că am scăpat de 406, dar, de asemenea, modificat formatul de răspuns. A fost mai mult... "vorbaret". (haha!) Mai multe modificări au fost necesare şi aici este rezultatul final:

var config = {anteturi: {
"Accept": ' cerere/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.succesul(funcţia(date, statutul, anteturi, config) {

var getLinksResponse = datele;

getLinksResponse.d.results.forEach(funcţia(Rezultatul) {

// şi aşa mai departe şi astfel încât spuma

Acest lucru doar sa transformat într-un 30 problema minut pentru noi, asa ca am avut ghinion. Sperăm că cineva aceasta constată utile.

</scop>

Unghiulare Fails la spre Bootstrap în IE9

Am jucat în jurul cu Angular.js pentru ultimele lung în timp ce şi pentru viaţa de mine, NU am putut obţine meu apps unghiulare pentru a lansa în IE9.  Toate lucrează bine în IE11 dar IE9 ar arăta doar figurate şi biţi similare.

Am căutat în jurul şi nu a putut găsi pe nimeni plângându-se despre problema lui.  It worked fin în Chrome, IE11, nu doar IE9.

Am fost aruncat în afara de faptul că consola IE a fost oferindu-mi erori de genul asta:

SEC7111: HTTPS securitatea e compromisa de res://Ieframe.dll/forbidframing.htm

Acea eroare a avut mă gândesc a fost unele probleme descărcarea unghiulare sau alte biblioteci care am nevoie.  Aşa cum se dovedeşte, Acest lucru nu a fost problema.

De poking jurul Internet, În cele din urmă am aflat că fraza am nevoie pentru a căuta a fost "bootstrap" şi că se pare ca procesul de bootstrap a acestuia.  În cele din urmă, problema mea a fost că am avut decorat meu <HTML> Tag-ul cu atributul ng-app, ca şi în:

<HTML ng-app = "MatrixApp">

Bine, care nu au de lucru pentru IE9.  În schimb, Am înfăşurat tot restul de HTML în <corpul> în interiorul unui div şi referinţe MatrixApp în acest fel.

Problema rezolvata.

Sperăm că acest lucru economiseşte cineva ceva durere.

</scop>

Creşterea gradului de conştientizare / Adoptarea unor cadre JavaScript

Colegul meu, Javed Elisaveta (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), a scris un post de blog rezumat scurt pe cadre el îi place sau cel puţin a fost folosind cu cu SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery pare să fi fost învingător pe teren, Deci de a vorbi, pentru vîrsta acum, dar altele sunt mai noi şi liniştit un fel de lupta, ca unghiulară. (SPServices, desigur, a fost un economizor de viaţă de ani şi va continua să fie aşa cred).

Ce sunt oameni folosind? Sunt acestea concentrat mai mult pe Microsoft scule (CSOM / JSOM) sau se deplasează mai mult faţă de unghiulară, Knock-out, Ember, etc?

Am o prejudecată în creştere faţă de aceste cadre de non-Microsoft. Cred că lucrurile MSFT este mai greu şi mai greu de a lucra cu, care necesită aproape la fel de mult de curbă de învăţare ca dev de server-side stil vechi.

Postati un comentariu aici sau la peste Big Apple SharePoint Dacă doriţi pentru a discuta despre (Big Apple va avea mai mult riscul de o discuţie bună).

</scop>

Depăşi enervant problemă cu URL-uri Relative în Lansarea rapidă SharePoint

Am vrut să adăugaţi un link la lansare rapidă de navigare altă zi şi mi-a spus SharePoint:

image

Versiune text curat de care este:

Asigura că URL-ul este valabil şi începe fie cu un caracter valid (un semn de număr (#) sau bară oblică (/)) sau un protocol valabile acceptate (de exemplu, "http://’, "https://’, "fişier://’, "ftp://’, "mailto:’, ' Ştiri:’).

"Blech şi variola!"Am spus.

Un workaround la acest lucru este de a folosi JavaScript pentru a găsi un link cunoscută în Lansarea rapidă şi de a trece peste comportamentul acestuia.

Pentru a testa acest lucru, Adauga un nou link la site-ul de testare thusly:

image

Am folosit jQuery. La spre solve it, obţine unele JavaScript şi jQuery pe pagina folosind tehnica ta preferată şi cu o linie de cod ca asta:

 

$(document).gata( funcţia () {

    $("o:conţine("Test URL-ul de înlocuire")").faceţi clic pe(funcţia () { alertă("faceţi clic pe schimbat comportamentul!"); reveni fals;});

});

Şi Bob pe unchiul tău.

JQuery selectorul găseşte fiecare <o> Tag-ul care a "Test URL-ul de înlocuire" în numele său. Poate doriţi să găsiţi-ton, care în funcţie de legătura şi astfel.

.click(funcţia() suprascrie orice SharePoint ar fi făcut atunci când utilizatorul face clic pe. Asiguraţi-vă că vă "întoarce false" sau altceva va face lucrurile tale şi apoi încercaţi să href lucru prea, care nu este aproape cu siguranţă scopul tau.

Acest lucru a fost făcut şi testare într-un mediu online SharePoint dar ar trebui să lucreze bine în 2010 şi mai devreme prea.

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin

Bietul om pe cache în JavaScript

[TL;DR versiune: utilizează module cookie pentru a stoca rezultatele apeluri async; face rezultatele de ultimele apeluri async imediat şi apoi le valida după pagină de încărcare.]

Am fost de lucru pe site-ul SharePoint intranet pentru un client care dispune de, Printre alte lucruri, o navigare secundara stilizate ale căror opţiuni de meniu sunt gestionate prin intermediul o listă particularizată vechi regulate.  Ideea este că clientul ajunge la site-ul "lor" meniu de control fără a afecta sau afectat de navigaţie globală pus de acesta.

(este ceva incredibil subversiv despre adăugarea unui CEWP care indică spre un fişier HTML care încarcă unele CSS şi JS pentru a modifica fundamental aproape totul despre comportamentul unui site... dar asta e pentru un alt post)

Codul pentru acest destul de simplu:

Inflamat la faţa locului aici este că de fiecare dată când cineva loveşte una din paginile site-ului, browser de web care utilizatorul este ajungând pentru a obţine elemente din listă.  Odată ce dev este completă şi testare a dovedit lucruri pentru a fi stabil şi complete, acest apel este necesar mai mult 99% de timp din meniul rareori modificări.  De asemenea, are un efect ciudat UI, care este comună în această lume nouă curajos de hiper-ajaxy site-uri web-pagina face şi abia apoi meniul render.  Este de nervozitate şi distrag atenţia, în opinia mea.  Şi nervozitate. Deci, cache-ul. 

Am modificat logica thusly:

  • Uita-te pentru un cookie în browser-ul care conţine meniul, am citit-o ultima
    • Dacă a întemeia, face imediat.  Nu aşteptaţi pentru ca pagina să termin de încărcare.  (Aveţi nevoie să vă asiguraţi că codul HTML este plasat strategic aici, dar nu este greu pentru a face).
  • Aşteptaţi pentru ca pagina să termin de încărcare şi să facă o asincron apel pentru a încărca până elementele de meniu dintr-o listă utilizând restul sau lists.asmx sau orice altceva
  • Compara ceea ce am primit împotriva cookie
    • Dacă se potriveşte, opreşte-te
    • În caz contrar, folosind jQuery, dinamic popula o grămadă, dacă <li>pe într-o <ul>
  • Utiliza CSS pentru a face toate formatările
  • Profit!

Unii dintre voi sunt de gând să spun, "Hei! nu există nici o reală în cache întâmplă aici deoarece sunteţi de lectură meniul oricum fiecare dată.”  Si ai dreptate-nu sunt oferindu-server nici un fel de pauza.  Dar pentru că apelul este asincron şi se întâmplă după ce pagina iniţială HTML payload face complet, se "simte" mai receptiv la utilizator.  Meniul redă destul de mult ca pagina atrage.  Dacă meniul se intampla la schimbare, utilizatorul este supus la o nervozitate re-trage din meniul, dar numai ca o singură dată.

Există câteva modalităţi de a face acest cache-ul mai eficientă şi de a ajuta server în acelaşi timp:

  • Pune într-o regulă că cache-ul"cookie" este valabil pentru un minim de 24 ore sau unele alt interval de timp. Atâta timp cât nu există nici un cookie-ul expirat, utilizează modulul cookie meniu instantaneu şi niciodată nu a lovit server.

Ei bine... asta e tot ce vin in minte acum :). 

Dacă cineva are vreo idee inteligent aici mi-ar plăcea să le cunoască.

Şi în fine – aceasta tehnica poate fi folosit pentru alte chestii.  Acest client are o serie de lucruri bazate pe date despre diverse pagini, mulţi dintre ei schimbare relativ rar (ca o dată pe săptămână sau o dată pe lună).  Dacă vizaţi domenii specifice de funcţionalitate, puteţi da o mai receptiv UI trăgând conţinut la magazinul local cookie şi redare imediat.  Se simte mai repede utilizatorului, chiar dacă nu salvaţi server orice cicluri.  Tu poate salvaţi în cicluri de server de decide cu privire la unele condiţii şi declanşează pentru a anula acest cache-ul local cookie.  Care este toate situaţionale şi artsy chestii şi într-adevăr cel mai distractiv :). 

</scop>

undefinedAboneaza-te la blog-ul meu.

Urmaţi-mă pe Twitter, la http://www.twitter.com/pagalvin