Archivy kategorií: JavaScript

HTTP 406 Chyba při použití úhlové $http.get proti SharePoint REST koncových bodů

Aktualizovat: Marc AD ndersson poukázal na tento velký kus info: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. To vysvětluje hodně :).

To může být vůbec nejhorší titul blogu! Anyhoo.

Jsem obvykle dělat všechny moje prototypování proti O365 instance. Mám své osobní instance tak, že se nemám bát a ovlivňuje někdo jiný. Jako stranou – si říkáme provedeno kolem virtuálních strojů na našich noteboocích s MECHEM – SQL Server, SLUŽBA IIS, rozhodnutí vs Hyper-V. VMWare? Anyhoo...

Jsem si vyvinul app pomocí úhlové v tomto prostředí, které se, mimo jiné, to:

$http.Get(serverUrl)
.úspěch(funkce(údaje, stav, záhlaví, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funkce(Výsledky) {

// a tak dále a tak pěnu

To bylo v pořádku jen ve dvou různých prostředích online služby SharePoint. Avšak, když můj kolega portován na instanci Cloudshare, vystupoval HTTP 406 Chyba (což bylo poprvé, co jsem kdy dostal tenhle, Takže... hurá, Asi). Jsme trochu výzkumu a všiml si, že záhlaví "Přijmout" vypnuto. SharePoint online byl naprosto spokojený s:

Přijmout: aplikace/json

Ale cloudshare instance (což je SP na prem, hostitelem virtuálního serveru) Chtěl klasické "odata = verbose" přidána také:

Přijmout: aplikace/json;OData = verbose

Chcete-li opravit, Přidali jsme záhlaví jako takové:

var config = {záhlaví: {
"Přijmout": "aplikace/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.úspěch(funkce(údaje, stav, záhlaví, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(funkce(Výsledky) {

// a tak dále a tak pěnu

To se zbavil 406, ale to také změnil formát odpovědi. To bylo více... verbose. (haha!) Další změny byly nutné, a tady je konečný výsledek:

var config = {záhlaví: {
"Přijmout": "aplikace/json;OData = verbose'
}
};

$http.Get(serverUrl,config)
.úspěch(funkce(údaje, stav, záhlaví, config) {

var getLinksResponse = data;

getLinksResponse.d.Results.forEach(funkce(Výsledky) {

// a tak dále a tak pěnu

Jen se proměnil v 30 minutě problém pro nás, tak to máme štěstí. Doufejme, že někdo zjistí, to užitečné.

</Konec>

Úhlové nedokáže zavaděč v IE9

Já jsem byla pohrával s Angular.js za poslední dlouho a pro život mě, Nemohl se dostat můj úhlové apps zahájit v IE9.  Všechny pracují dobře v IE11, ale IE9 by předvést, složené závorky a podobné kousky.

Jsem hledal a nemohl najít nikoho stěžovat na jeho problému.  Fungovalo to dobře v Chrome, IE11, jen ne IE9.

Byla odsunuta ze skutečností, že konzole IE mi dává chyby, jako to:

SEC7111: HTTPS zabezpečení je ohrožen res://Ieframe.dll/forbidframing.htm

Tato chyba se mi myslí, že tam byl nějaký problém při stahování úhlové nebo jiné knihovny, které jsem potřeboval.  Jak to dopadá, to nebyla otázka.

Podle Postrkování kolem internety, Nakonec jsem zjistil, že fráze, kterou jsem musel hledat "zaváděcí" a že to vypadalo, jako bootstrappingu Exnerem.  Na konci, můj problém byl, že jsem obohatil můj <HTML> Tag s atributem ng-app, stejně jako v:

<HTML ng-app = "MatrixApp">

No., to není práce pro IE9.  Místo toho, Zabalil jsem zbytek HTML v <tělo> uvnitř div a odkazy MatrixApp tímto způsobem.

Problém vyřešen.

Doufejme, že to někdo šetří nějaký smutek.

</Konec>

Rostoucí povědomí / Přijetí JavaScript rámců

Můj kolega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), napsal krátký souhrn blogu na rámce líbí, nebo alespoň používá s s SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery se zdá k byli Viktor na hřišti, tak říkajíc, už léta, ale ostatní jsou více nových a utiša druh bojuje, jako úhlová. (SPServices, Samozřejmě, zachránce života už roky a bude nadále tak myslím).

Co používají lidé? Jsou více zaměřeny na nástrojích společnosti Microsoft (CSOM / JSOM) nebo více k úhlové přemístění, Vyseknutí, Žhavý uhlík, atd?

Mám rostoucí zaujatosti vůči těmto programům společnosti Microsoft. Myslím, že MSFT věci je těžší a těžší práce s, vyžadování téměř stejně učení křivky jako staromódní straně serveru dev.

Přidat komentář zde nebo na Big Apple SharePoint Pokud chcete diskutovat o (Big Apple bude mít větší pravděpodobnost zajímavá diskuse).

</Konec>

Překonat nepříjemný problém s relativní adresy URL v SharePoint Quick Launch

Chtěl jsem přidat odkaz na panelu Snadné spuštění navigace na druhý den a řekl mi, SharePoint:

image

Čistě textové verze, která je:

Zajistit, že adresa URL je platný a začíná buď platný znak (znak čísla (#) nebo lomítko (/)) nebo platný podporovaný protokol (například, ' http://’, ' https://’, ' soubor://’, ' ftp://’, ' mailto:’, ' Novinky:’).

"Blech a neštovice!"Řekl jsem.

Řešení pro to je najít známé odkaz v panelu Snadné spuštění a její chování přepsat pomocí JavaScript.

Pro tento test, přidáte nový odkaz na web testovací thusly:

image

Použil jsem jQuery. To vyřešit, Získejte nějaký JavaScript a jQuery na stránku vaší oblíbenou technikou a s řádkem kódu, jako je tento:

 

$(dokument).připraven( funkce () {

    $("a:obsahuje('Testovat URL náhradní')").klepněte na tlačítko(funkce () { Výstraha("změněné chování!"); návrat NEPRAVDA;});

});

A strejda je Bob.

JQuery volič najde každý <a> značka, která má "Testovat URL náhradní" v názvu. Možná budete chtít najít melodii, která podle odkazu a tak.

Klikněte(funkce() přepíše, co SharePoint by to udělal, když uživatel klepnul. Ujistěte se, že jste "return false", jinak to bude dělat svoje věci a zkuste href věc příliš, což je téměř jistě není váš cíl.

To bylo provedeno, a test v prostředí služby SharePoint online, ale měl by fungovat i v 2010 a starší příliš.

</Konec>

undefinedPřihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin

Chudák je ukládání do mezipaměti v JavaScriptu

[TL;Dr. verze: používají soubory cookie k ukládání výsledků asynchronní volání; okamžitě vykreslovat výsledky minulých asynchronní volání a poté je ověřit po načtení stránky.]

Pracoval jsem na intranetovém webu SharePoint pro klienta, že funkce, mimo jiné, stylizované sekundární navigace, jejichž možnosti nabídky jsou spravovány prostřednictvím pravidelné staré vlastní seznam.  Myšlenkou je, že klient dostane k ovládání menu "jejich" stránek bez ovlivnění nebo ovlivnění globální navigační uhasit jím.

(je něco neuvěřitelně podvratné o přidání CEWP, který odkazuje na soubor HTML, který načítá některé CSS a JS zásadně změnit téměř vše o webu chování..., ale to je na jiné místo)

Kód pro tento docela jednoduchá:

Bolavé místo tady je, že pokaždé, když někdo udeří jedním z stránek webu, jeho webový prohlížeč je oslovit získat položky ze seznamu.  Jakmile dev je kompletní a testování prokázal věci být stabilní a úplné, Toto volání je zbytečné více než 99% času od menu se mění jen zřídka.  Má také zvláštní vliv UI, které je běžné v tomto odvážném novém světě hyper ajaxy webových stránek – stránka vykreslí a teprve potom menu vykreslit.  Je nervózní a rozptylující podle mého názoru.  A nervozita. Tak, ukládání do mezipaměti. 

Upravil jsem logiku thusly:

  • Vyhledejte soubor cookie v prohlížeči, který obsahuje nabídku, když jsem naposledy četl
    • Pokud nalezen, vykreslení to okamžitě.  Nečekej na stránce na dokončení načítání.  (Musíte se ujistit, že HTML je strategicky umístěn zde, ale to není těžké udělat).
  • Čekat na stránce dokončení načítání a asynchronní volání načítání menu položky ze seznamu pomocí REST nebo lists.asmx nebo co
  • Porovnejte, co mám proti souboru cookie
    • Odpovídá-li, Stop
    • Jinak, pomocí jQuery, dynamicky naplníte parta, pokud <li>je v <ul>
  • Veškeré formátování pomocí CSS
  • Zisk!

Někteří z vás se bude říkat, "Hej! neexistuje žádný skutečný mezipaměti děje protože čtete menu stejně každý jednotlivý čas.”  A máš pravdu – nedám na serveru jakýkoliv druh přestávky.  Ale protože volání asynchronní a se stane po stránce je první plně vykreslí HTML datové, to "cítí" lépe reagovat na uživatele.  Menu vykreslí docela jako stránky kreslí.  Pokud se změna stane menu, uživatel je vystaven nervózní re-kreslit menu, ale jen jednou.

Existuje několik způsobů, jak provést tuto mezipaměť efektivnější a pomohli server ve stejné době:

  • Zavést pravidlo, že "cookie cache" je platná pro minimálně 24 hodin, nebo nějaké jiné časového rámce. Tak dlouho, dokud neexistuje žádný cookie vypršela, pomocí souboru cookie menu snímek a nikdy neuhodil server.

Dobře..., to je vše, které přicházejí na mysl hned teď :). 

Pokud má někdo nějaké chytré nápady zde rád bych znát.

A konečně – tento postup lze použít pro jiné věci.  Tohoto klienta stránka má několik věcí, řízené daty na různých stránkách, Mnozí z nich mění poměrně zřídka (jako jednou za týden nebo jednou za měsíc).  Pokud cílíte na konkrétní oblasti funkcí, vstřícnější UI můžete dát obsah z úložiště místní soubor cookie a vykreslování okamžitě.  Připadá mi to rychleji k uživateli i v případě, že se neukládají na serveru žádné cykly.  Jste může rozhodování o některých podmínkách a spouště rušit platnost mezipaměti místní soubor cookie uložte cykly na server.  To je vše situační a diletantský věci a opravdu nejzábavnější :). 

</Konec>

undefinedPřihlásit se na mém blogu.

Za mnou na Twitter na http://www.twitter.com/pagalvin