Αρχεία κατηγοριών: JavaScript

HTTP 406 Σφάλμα κατά τη χρήση γωνιακή $http.get εναντίον του SharePoint υπόλοιπο τελικά σημεία

Ενημέρωση: Marc AD ndersson επεσήμανε αυτό το μεγάλο κομμάτι των πληροφοριών: http://Blogs.Office.com/2014/08/13/JSON-Light-support-REST-SharePoint-API-Released/. Που εξηγεί πολύ :).

Αυτό μπορεί να είναι η χειρότερη τίτλος του ένα blog post ποτέ! Anyhoo.

Συνήθως κάνω όλα μου πρωτοτυποποίηση ενάντια σε μια παρουσία O365. Έχω προσωπική παράδειγμα μου, έτσι ώστε δεν χρειάζεται να ανησυχείτε για το που κάποιος άλλος επηρεάζουν. Σαν παραλειπόμενα-Θυμηθείτε όταν καλούμε γίνεται γύρω από τις εικονικές μηχανές μας φορητούς υπολογιστές με το ΒΡΎΟ-SQL Server, IIS, ΑΡΧΈΣ vs Hyper-V. VMWare? Anyhoo...

Είχα αναπτύξει app χρησιμοποιώντας γωνιακή σε αυτό το περιβάλλον που κάνει, μεταξύ άλλων, αυτό:

$http.get(serverUrl)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.value.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Δούλευε μια χαρά σε δύο διαφορετικά SharePoint online περιβάλλοντα. Ωστόσο, όταν ο συνάδελφός μου μεταφέρει σε μια παρουσία Cloudshare, είχε πάρει μια HTTP 406 σφάλμα (που ήταν η πρώτη φορά που πήρα ποτέ ότι ένας, έτσι... yay, Υποθέτω). Κάναμε ένα κομμάτι της έρευνας και παρατήρησα ότι η επικεφαλίδα "Αποδοχή" ήταν μακριά. SharePoint online ήταν απόλυτα ευχαριστημένος με:

Δεχθεί: εφαρμογή/json

Αλλά η παρουσία του cloudshare (Ποιο είναι το SP στο prem, φιλοξενείται σε έναν εικονικό διακομιστή) ήθελε το κλασικό "odata = verbose" προστίθεται στο καθώς και:

Δεχθεί: εφαρμογή/json;OData = λεπτομερή

Να καθορίσει ότι, Έχουμε προσθέσει την κεφαλίδα, ως εκ τούτου:

var config = {κεφαλίδες: {
"Αποδοχή": «εφαρμογή/json;OData = λεπτομερή»
}
};

$http.get(serverUrl,Config)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.value.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Που πια απαλλαγεί από το 406, αλλά επίσης άλλαξε την μορφή της απάντησης. Ήταν περισσότερο... λεπτομερούς καταγραφής. (haha!) Περισσότερες αλλαγές που απαιτούνταν, και εδώ είναι το τελικό αποτέλεσμα:

var config = {κεφαλίδες: {
"Αποδοχή": «εφαρμογή/json;OData = λεπτομερή»
}
};

$http.get(serverUrl,Config)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.d.Results.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Αυτό μόνο να μετατραπεί σε ένα 30 λεπτό πρόβλημα για μας, έτσι εμείς lucked έξω. Ας ελπίσουμε ότι κάποιος βρίσκει χρήσιμες.

</Τέλος>

Γωνιακή αποτυγχάνει να Μπουτστράπ σε IE9

Έχω παίξει με Angular.js για το τελευταίο καιρό ενώ και για τη ζωή μου, ΔΕΝ θα μπορούσα να πάρω γωνιακή apps μου για να ξεκινήσει τον IE9.  Όλα δουλεύουν μια χαρά σε IE11 αλλά IE9 θα δείξει μόνο τα άγκιστρα και παρόμοια κομμάτια.

Αναζήτησα τριγύρω, και δεν μπόρεσα να βρω κανέναν διαμαρτύρονται για το πρόβλημά του.  Ελειτούργησε το πρόστιμο σε χρώμιο, IE11, απλά δεν IE9.

Ήταν να αποτινάξει από το γεγονός ότι η κονσόλα IE μου έδινε σφάλματα όπως αυτό:

SEC7111: Διακυβεύεται η ασφάλεια HTTPS από ΑΠΕ://ieframe.dll/forbidframing.htm

Το σφάλμα αυτό είχε μου σκέψη υπήρξε κάποιο πρόβλημα κατά τη λήψη τόσο γωνιώδες ή άλλες βιβλιοθήκες που χρειαζόμουν.  Όπως αποδεικνύεται, αυτό δεν ήταν το θέμα.

Με το σπρώξιμο γύρω από το Ίντερνετ, Τελικά ανακάλυψα ότι η φράση που χρειαζόμουν για να αναζητήσετε ήταν "εκκίνησης" και ότι φαινόταν σαν το bootstrapping αποτυχία.  Στο τέλος, το πρόβλημά μου ήταν ότι είχε διακόσμησα μου <HTML> ετικέτα με το χαρακτηριστικό ng-app, όπως και στην:

<HTML ng-app = "MatrixApp">

Καλά, Αυτός δεν ελειτούργησε για IE9.  Αντί, Εγώ τυλιγμένα όλα τα υπόλοιπα τα HTML σε το <οργανισμός> μέσα σε ένα div και αναφορές MatrixApp αυτόν τον τρόπο.

Πρόβλημα λύθηκε.

Ας ελπίσουμε ότι αυτό αποθηκεύει κάποιος κάποια θλίψη.

</Τέλος>

Αυξανόµενη / Έγκριση JavaScript πλαισίων

Ο συνάδελφός μου, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), έγραψε μια σύντομη περίληψη του blog για τα πλαίσια του αρέσει ή τουλάχιστον έχει χρησιμοποιήσει με με SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery φαίνεται να είναι ο νικητής στο πεδίο, να το πω έτσι, για χρόνια τώρα, αλλά οι άλλοι είναι πιο νέα και αποστακτήρες είδος μάχεται, όπως γωνιακή. (SPServices, Φυσικά, έχει μια ζωή saver για χρόνια και θα συνεχίσει να είναι έτσι νομίζω).

Τι οι άνθρωποι που χρησιμοποιούν? Εστιάζουν περισσότερο στην εργαλειακή της Microsoft (CSOM / JSOM) ή κινείται περισσότερο προς τη γωνιακή, Νοκ-άουτ, Χόβολη, κλπ?

Έχω μια αυξανόμενη τάση προς την κατεύθυνση αυτών των μη-Microsoft πλαισίων. Νομίζω ότι τα πράγματα MSFT είναι ολοένα και δυσκολότερο να συνεργαστεί με, που απαιτούν σχεδόν τόσο πολύ από την καμπύλη εκμάθησης με ανισοϋψείς διακομιστή dev.

Ταχυδρομήστε ένα σχόλιο εδώ ή πάνω σε Μεγάλο μήλο SharePoint Αν θέλετε να συζητήσετε (Μεγάλο μήλο θα έχουν μεγαλύτερη πιθανότητα να μια καλή συζήτηση).

</Τέλος>

Ξεπεραστούν ενοχλητικό πρόβλημα με συγγενής Urls στο SharePoint γρήγορη εκκίνηση

Θα ήθελα να προσθέσω μια σύνδεση στη ναυσιπλοΐα γρήγορης εκκίνησης τις προάλλες και μου είπε SharePoint:

image

Καθαρό κείμενο έκδοση του που είναι:

Εξασφαλίσει ότι η διεύθυνση URL είναι έγκυρη και αρχίζει με είτε έγκυρος χαρακτήρας (ένα αριθμητικό σύμβολο (#) ή κάθετο (/)) ή μια έγκυρη Υποστηριγμένο πρωτόκολλο (για παράδειγμα, «http://’, «https://’, «αρχείο://’, «ftp://’, «mailto:’, «Ειδήσεις:’).

"Blech και ευλογιά!"Είπα.

Μια λύση για αυτό είναι η χρήση JavaScript για να βρείτε μια γνωστή η αεροπορική σύνδεση στην γρήγορη έναρξη και να παρακάμψετε τη συμπεριφορά.

Για να ελέγξετε αυτό, προσθέσετε ένα νέο σύνδεσμο στο δικτυακό σας τόπο δοκιμής, thusly:

image

Χρησιμοποίησα jQuery. Να το λύσουμε, πάρετε κάποια JavaScript και jQuery στη σελίδα χρησιμοποιώντας την τεχνική σας αγαπημένο και με μια γραμμή κώδικα όπως αυτό:

 

$(έγγραφο).έτοιμο( συνάρτηση () {

    $("ένα:περιέχει(«Δοκιμή URL αντικατάσταση»)").Κάντε κλικ στο κουμπί(συνάρτηση () { συναγερμού("αλλάξει κλικ συμπεριφορά!"); επιστροφή ψευδές;});

});

Και σας θείος του Bob.

Ο επιλογέας jQuery βρίσκει κάθε <ένα> ετικέτα που έχει «Αντικατάστασης δοκιμή URL» στο όνομά του. Μπορεί να θέλετε να βρείτε-μελωδία που ανάλογα με το σας σύνδεσμο και τέτοια.

Το .click(συνάρτηση() παρακάμπτει ό, τι του SharePoint θα είχε κάνει όταν ο χρήστης κάνει κλικ. Βεβαιωθείτε ότι σας "επιστρέψει false" ή αλλιώς θα κάνουμε πράγματα σας και προσπαθήστε να το href πράγμα πάρα πολύ, που είναι σχεδόν σίγουρα δεν είναι στόχος σας.

Αυτό έγινε και δοκιμής σε περιβάλλον SharePoint online, αλλά θα πρέπει να λειτουργούν καλά σε 2010 και νωρίτερα πάρα πολύ.

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin

Φτωχός προσωρινή αποθήκευση σε JavaScript

[TL;DR έκδοση: χρησιμοποιεί cookies για την αποθήκευση των αποτελεσμάτων των async κλήσεις; καθιστούν τα αποτελέσματα του παρελθόντος async κλήσεις αμέσως και στη συνέχεια επικύρωση τους μετά από τη σελίδα του φορτίου.]

Έχω εργαστεί στην τοποθεσία intranet του SharePoint για έναν πελάτη που χαρακτηρίζει, μεταξύ άλλων, μια στυλιζαρισμένη δευτερεύουσα πλοήγηση για διαχείριση των οποίων επιλογές μενού μέσω μια τακτική παλιό προσαρμοσμένη λίστα.  Η ιδέα είναι ότι ο πελάτης παίρνει για τον έλεγχο της ιστοσελίδας "τους" μενού χωρίς να επηρεάσει ή να επηρεαστεί από την παγκόσμιας πλοήγησης που τίθεται από αυτό.

(υπάρχει κάτι απίστευτα ανατρεπτική σχετικά με την προσθήκη ενός CEWP που οδηγεί σε ένα αρχείο HTML που φορτώνει κάποια CSS και JS να μεταβάλλουν ριζικά σχεδόν τα πάντα σχετικά με τη συμπεριφορά ενός ιστοτόπου..., αλλά αυτό είναι για άλλη θέση)

Τον κώδικα για αυτό το πολύ απλό:

  • Περιμένετε για την σελίδα για να τελειώσει τη φόρτωση και να κάνει μια async κλήσης να φορτώσει επάνω μενού στοιχεία από μια λίστα που χρησιμοποιεί το υπόλοιπο ή lists.asmx ή οτιδήποτε άλλο
  • Χρησιμοποιώντας jQuery, συμπλήρωση δυναμικά μια δέσμη, αν <Li>του μέσα σε ένα γονέα <UL> (Δείτε το άρθρο του Christian Pinder εδώ για μια απλοϊκή εξήγηση για αυτό το tecnnique)
  • Χρήση CSS για να κάνει όλη τη μορφοποίηση
  • Κέρδος!

Το ευαίσθητο σημείο εδώ είναι ότι κάθε φορά που κάποιος χτυπά μια από τις σελίδες του site, πρόγραμμα περιήγησης web του χρήστη που είναι το άνοιγμα να πάρει τα στοιχεία από τη λίστα.  Μόλις dev είναι πλήρης και δοκιμών έχει αποδειχθεί τα πράγματα να είναι σταθερή και πλήρης, η παρούσα πρόσκληση αποτελεί περιττή περισσότερο από 99% του χρόνου δεδομένου ότι ο κατάλογος αλλάζει σπάνια.  Έχει επίσης ένα παράξενο επηρεάσει UI, η οποία είναι κοινή σε αυτό γενναίο νέο κόσμο της υπερ-ajaxy τοποθεσίες web-σελίδα καθιστά και μόνο τότε το μενού καθιστούν.  Είναι φοβισμένος και αποσπούν την προσοχή κατά τη γνώμη μου.  Και εκνευρισμού. Έτσι, προσωρινή αποθήκευση. 

Άλλαξα τη λογική thusly:

  • Αναζητήστε ένα cookie στο πρόγραμμα περιήγησης που περιέχει το μενού όπως διάβασα τελευταία
    • Αν βρεθεί, καταστήσει αμέσως.  Μην περιμένετε για την σελίδα να τελειώσουν.  (Θα πρέπει να βεβαιωθείτε ότι σας HTML είναι στρατηγικά τοποθετημένα εδώ, αλλά δεν είναι δύσκολο να κάνει).
  • Περιμένετε για την σελίδα για να τελειώσει τη φόρτωση και να κάνει μια async κλήσης να φορτώσει επάνω μενού στοιχεία από μια λίστα που χρησιμοποιεί το υπόλοιπο ή lists.asmx ή οτιδήποτε άλλο
  • Συγκρίνετε αυτό που πήρα από το cookie
    • Αν ταιριάζει, Σταμάτα
    • Διαφορετικά, χρησιμοποιώντας jQuery, συμπλήρωση δυναμικά μια δέσμη, αν <Li>του σε ένα <UL>
  • Χρήση CSS για να κάνει όλη τη μορφοποίηση
  • Κέρδος!

Κάποιοι από εσάς θα πω, "Γεια σου! δεν υπάρχει καμία πραγματική εναποθηκεύοντας συνεχίζεται εδώ δεδομένου ότι διαβάζετε το μενού ούτως ή άλλως κάθε ενιαίος χρόνος.”  Και έχεις δίκιο-δεν είμαι δίνοντας το διακομιστή κάθε είδους διάλειμμα.  Αλλά επειδή η κλήση είναι ασύγχρονες και θα συμβεί μετά την αρχική σελίδα HTML ωφέλιμο φορτίο καθιστά πλήρως, "αισθάνεται" ανταποκρίνεται περισσότερο στο χρήστη.  Το μενού καθιστά αρκετά όσο εφιστά την σελίδα.  Αν το μενού που συμβαίνει στην αλλαγή, ο χρήστης υπόκειται σε μια εκνευρισμού εκ νέου κατάρτιση του μενού, αλλά μόνο μια στιγμή.

Υπάρχουν μερικοί τρόποι για να κάνει caching αυτό πιο αποτελεσματική και να βοηθήσει στο διακομιστή, την ίδια στιγμή:

  • Βάλτε σε έναν κανόνα ότι το cache"cookie" είναι έγκυρο για τουλάχιστον 24 ώρες ή κάποια άλλη προθεσμία. Όσο υπάρχει κανενός cookie που έληξε, Χρησιμοποιήστε το cookie του μενού στιγμιότυπο και ποτέ δεν χτύπησε το server.

Καλά..., που είναι όλα που έρχονται στο μυαλό αυτή τη στιγμή :). 

Αν κάποιος έχει οποιαδήποτε έξυπνες ιδέες εδώ, θα ήθελα πολύ να δοκοῦσί σοι ἐπίστασθαι.

Και τέλος-αυτή η τεχνική μπορεί να χρησιμοποιηθεί για άλλα πράγματα.  Σελίδα αυτή του πελάτη έχει μια σειρά από πράγματα που βασίζονται σε δεδομένα σε διάφορες σελίδες, Πολλοί από αυτούς αλλαγή σχετικά σπάνια (όπως μία φορά την εβδομάδα ή μία φορά το μήνα).  Αν στοχεύετε σε συγκεκριμένες περιοχές της λειτουργικότητας, Μπορείτε να δώσετε ένα πιο απαντητικό UI για το τράβηγμα περιεχόμενο από το κατάστημα τοπικά cookie και καθιστώντας αμέσως.  Αισθάνεται πιο γρήγορα στο χρήστη, ακόμη και αν δεν σώζετε το διακομιστή κάθε κύκλους.  Σας μπορεί να εκτός από τους κύκλους του διακομιστή αποφασίζοντας σχετικά με ορισμένες προϋποθέσεις και εναύσματα να ακυρώνει την cache αυτή τοπικό cookie.  Που είναι όλα της κατάστασης και artsy πράγματα και πραγματικά το πιο διασκεδαστικό :). 

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin