वर्ग पुरालेख: जावास्क्रिप्ट

HTTP 406 SharePoint बाकी अंत अंक के खिलाफ कोणीय $http.get का उपयोग करते समय त्रुटि

अद्यतन: मार्क विज्ञापन ndersson जानकारी के इस महान टुकड़ा बाहर की ओर इशारा किया: http://blogs.office.com/2014/08/13/json-light-support-rest-sharepoint-api-released/. कि बहुत कुछ बताते हैं :).

कि एक ब्लॉग पोस्ट के सबसे खराब शीर्षक हो सकता है कभी! Anyhoo.

मैं आमतौर पर एक O365 इंस्टेंस के खिलाफ मेरी प्रोटोटाइप के सभी करते हैं. मैं मेरी व्यक्तिगत उदाहरण है इतना है कि मैं किसी और को प्रभावित करने के बारे में चिंता करने की जरूरत नहीं है. एक अलग रूप में-जब हम काई-के साथ हमारे लैपटॉप पर आभासी मशीनों के चारों ओर बढ़ाया कॉल SQL Server याद, IIS, हायपर-V बनाम तय करने. VMWare? Anyhoo...

मैं एक app Angular करता है इस वातावरण में का उपयोग कर विकसित किया था, अन्य बातों के अलावा, यह:

$http.get(serverUrl)
.सफलता(समारोह(डेटा, स्थिति, शीर्ष लेख, config) {

var getLinksResponse = डेटा;

getLinksResponse.value.forEach(समारोह(theResult) {

// और इतने पर और इतने फेन

यह बस ठीक दो विभिन्न SharePoint ऑनलाइन वातावरण में काम कर रहा था. हालांकि, जब मेरे सहयोगी यह एक Cloudshare इंस्टेंस के लिए रखी, वह हो रही थी एक HTTP 406 त्रुटि (जो पहली बार मैं कभी मिला है कि एक था, तो.. याय, मेरा अंदाज़ा है). हम अनुसंधान के एक सा था और देखा कि "स्वीकार" शीर्ष लेख बंद था. SharePoint ऑनलाइन के साथ पूरी तरह से खुश था:

स्वीकार करें: आवेदन/json

Cloudshare आवृत्ति है लेकिन (जो प्रेम पर सपा है, एक वर्चुअल सर्वर में मेजबानी की) क्लासिक चाहता था "odata वाचाल =" में रूप में अच्छी तरह से जोड़ा गया:

स्वीकार करें: आवेदन/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 में Bootstrap करने के लिए विफल रहता है

मैं Angular.js के साथ पिछले के लिए, जबकि लंबे समय और मेरे जीवन के लिए खेल रहा हूँ चारों ओर, मैं मेरी कोणीय apps IE9 में लॉन्च करने के लिए प्राप्त नहीं कर सका।  वे सब काम ठीक IE11 में लेकिन IE9 बस घुंघराले ब्रेसिज़ और इसी तरह बिट्स दिखाना होगा.

मैं आसपास खोज की है और किसी को अपनी समस्या के बारे में शिकायत नहीं मिल सकता।  यह ठीक क्रोम में काम किया, IE11, न सिर्फ IE9.

मैं तथ्य यह है कि आईई कंसोल त्रुटियों के इस तरह मुझे दे रहा था द्वारा फेंका गया था:

SEC7111: HTTPS सुरक्षा res द्वारा समझौता किया है://ieframe.dll/forbidframing.htm

उस त्रुटि मुझे वहाँ कुछ समस्या कोणीय डाउनलोड करने या अन्य पुस्तकालयों मैं की जरूरत है कि गया था सोच रहा था।  के रूप में इसे मुड़ता है, यह मुद्दा नहीं था.

Internets के आसपास poking द्वारा, मैं अंत में था कि मैं जरूरत है खोजने के लिए वाक्यांश "bootstrap" और bootstrapping असफल रहा था लग रहा था कि पता चला।  अंत में, मेरी समस्या यह थी कि मुझे सजाया था मेरा <html> एनजी-app विशेषता के साथ टैग, के रूप में:

<html एनजी-app "MatrixApp" =>

अच्छी तरह से, कि IE9 के लिए काम नहीं किया।  इसके बजाय, मैं सब के आराम HTML में लिपटे <शरीर> एक div और सन्दर्भ MatrixApp इस तरह के अंदर.

समस्या का हल.

उम्मीद है कि यह किसी को कुछ दु: ख बचाता है.

</अंत>

जागरूकता बढ़ाएं / जावास्क्रिप्ट चौखटे के दत्तक ग्रहण

मेरे सहयोगी, जावेद अंसारी (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), वह पसंद करती है या कम से कम के साथ SharePoint के साथ उपयोग कर रहा है चौखटे पर एक संक्षिप्त सारांश ब्लॉग पोस्ट ने लिखा: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery विक्टर मैदान पर किया गया है लगता है, तो बात है, अब साल के लिए, लेकिन दूसरों को और अधिक नए हैं और इसे से जूझ रहे के पोस्टरों को सॉर्ट, Angular की तरह. (SPServices, बेशक, एक जीवन रक्षक वर्षों के लिए किया गया है और हो सकता है तो मुझे लगता है कि करने के लिए जारी रहेगा).

क्या लोगों का उपयोग कर रहे हैं? वे माइक्रोसॉफ्ट के टूलींग पर अधिक ध्यान केंद्रित कर रहे हैं (CSOM / JSOM) या अधिक Angular की ओर चलती, नॉकआउट, अंगारा, आदि?

मैं इन गैर-Microsoft चौखटे की ओर बढ़ती पूर्वाग्रह है. मुझे लगता है कि और के साथ काम करने के लिए जोर जोर से MSFT चीज़ें है, लगभग के रूप में ज्यादा पुरानी शैली सर्वर-साइड देव के रूप में सीखने की अवस्था की आवश्यकता होती.

एक टिप्पणी यहाँ पोस्ट या पर पर बिग एप्पल SharePoint यदि आप चर्चा करना चाहते हैं (बिग एप्पल एक अच्छी चर्चा की अधिक संभावना होती है करेगा).

</अंत>

SharePoint त्वरित लॉन्च में रिश्तेदार यूआरएल के साथ कष्टप्रद समस्या पर काबू पाने

मैं दूसरे दिन त्वरित लॉन्च नेविगेशन करने के लिए एक लिंक जोड़ने के लिए चाहता था और SharePoint मुझे बताया:

image

कि शुद्ध पाठ संस्करण है:

सुनिश्चित करें कि URL मान्य है और के साथ या तो मान्य वर्ण शुरू होता है (एक संख्या चिह्न (#) या फ़ॉरवर्ड स्लैश (/)) या कोई मान्य प्रोटोकॉल समर्थित (उदाहरण के लिए, ' http://’, ' https://’, ' फ़ाइल://’, ' एफ़टीपी://’, ' इन्हें मेल करें:’, ' समाचार:’).

"Blech और चेचक!"मैंने कहा.

त्वरित लॉन्च में एक ज्ञात लिंक ढूँढें और उसके व्यवहार को ओवरराइड करने के लिए जावास्क्रिप्ट का उपयोग करने के लिए यह करने के लिए एक workaround है.

इस परीक्षण के लिए, thusly अपने परीक्षण साइट के लिए एक नई लिंक जोड़ने:

image

मैं jQuery का उपयोग. यह हल करने के लिए, कुछ जावास्क्रिप्ट और jQuery कोड इस तरह की एक पंक्ति के साथ और अपने पसंदीदा तकनीक का उपयोग कर पृष्ठ पर जाओ:

 

$(दस्तावेज़).तैयार( समारोह () {

    $("एक:होता है('URL प्रतिस्थापन का परीक्षण')").क्लिक करें(समारोह () { चेतावनी("परिवर्तित क्लिक व्यवहार!"); वापस जाएँ झूठी;});

});

और अपने चाचा बॉब है.

JQuery चयनकर्ता पाता है हर <एक> टैग है कि इसके नाम में "Test URL प्रतिस्थापन" है. आप ढूँढें जो आपके लिंक और इस तरह के आधार पर ट्यून करने के लिए चाहते हो सकता.

.Click(समारोह() ओवरराइड करता है जब उपयोगकर्ता क्लिक किया जो भी SharePoint किया होता. सुनिश्चित करें कि आप "वापसी झूठी" या फिर इसे अपने सामान करना और फिर href बात करने की कोशिश भी करेंगे, जो लगभग निश्चित रूप से अपने लक्ष्य नहीं है.

यह किया गया था और एक SharePoint ऑनलाइन वातावरण में परीक्षण होना चाहिए लेकिन में अच्छी तरह से काम 2010 और इससे पहले भी.

</अंत>

undefinedमेरे ब्लॉग के लिए सदस्यता लें.

मेरे चहचहाना पर का पालन करें http://www.twitter.com/pagalvin

गरीब आदमी जावास्क्रिप्ट में कैशिंग है

[TL;डॉ. संस्करण: async कॉल के परिणामों को संग्रहीत करने के लिए कुकीज़ का उपयोग करें; पिछले async कॉल का परिणाम तुरंत प्रस्तुत करना और फिर उन्हें पृष्ठ-लोड करने के बाद मान्य करें।]

मैं SharePoint इंट्रानेट साइट पर एक ग्राहक के लिए काम कि सुविधाओं कर दिया गया है, अन्य बातों के अलावा, एक stylized माध्यमिक नेवीगेशन जिसका मेनू विकल्पों के माध्यम से एक नियमित रूप से पुराने कस्टम सूची प्रबंधित कर रहे हैं।  विचार है कि ग्राहक को प्रभावित करने वाले या वैश्विक नेविगेशन द्वारा इसे बाहर डाल द्वारा प्रभावित किया जा रहा बिना "उनके" साइट मेनू नियंत्रण करने के लिए हो जाता है.

(वहाँ कुछ अविश्वसनीय रूप से एक CEWP कि बताते हैं कि कुछ सीएसएस और जे एस एक साइट के व्यवहार के बारे में लगभग सब कुछ मौलिक परिवर्तन करने के लिए लोड करता है, लेकिन है कि एक और पोस्ट के लिए किसी HTML फ़ाइल को जोड़ने के बारे में विध्वंसक है)

यह बहुत आसान के लिए कोड:

  • पेज लोड हो रहा है खत्म करो और एक async बाकी या lists.asmx या जो कुछ भी का उपयोग कर एक सूची से मेनू आइटम को लोड करने के लिए कॉल करने के लिए प्रतीक्षा करें
  • JQuery का उपयोग, गतिशील रूप से अगर एक गुच्छा आबाद <li>एक माता पिता के अंदर है <उल> (इस tecnnique की एक सरलीकृत विवरण के लिए ईसाई Pinder लेख यहाँ देखें)
  • सभी स्वरूपण करने के लिए सीएसएस का उपयोग करें
  • लाभ!

है गले में हाजिर यहाँ यह है कि हर बार किसी को भी साइट के पृष्ठों में से एक हिट, उस उपयोगकर्ता के वेब ब्राउज़र सूची से आइटम प्राप्त करने के लिए पहुँच रहा है।  एक बार देव पूरा हो गया है और परीक्षण किया जा करने के लिए बातें साबित हो गया है स्थिर और पूर्ण करें, इस कॉल अनावश्यक है अधिक से अधिक 99% समय के बाद से मेनू शायद ही कभी बदल जाता है।  यह भी एक अजीब UI प्रभावित इस बहादुर नई दुनिया में हाइपर ajaxy वेब साइटों की आम है जो है – पृष्ठ renders और केवल तब मेनू प्रदान करता है।  यह चिड़चिड़ा और मेरे विचार में ध्यान भंग है।  और चिड़चिड़ा. तो, कैशिंग। 

मैं तर्क thusly संशोधित:

  • यह देखो कि के रूप में मैं पिछले मेनू में होते हैं जो ब्राउज़र में एक कुकी के लिए पढ़ें
    • अगर पाया, यह तुरंत प्रस्तुत करना।  पेज लोडिंग समाप्त करने के लिए इंतजार मत करो।  (आप की जरूरत है अपने HTML रणनीतिक यहाँ रखा है यह सुनिश्चित करने के लिए, लेकिन ऐसा करना कठिन नहीं है).
  • पेज लोड हो रहा है खत्म करो और एक async बाकी या lists.asmx या जो कुछ भी का उपयोग कर एक सूची से मेनू आइटम को लोड करने के लिए कॉल करने के लिए प्रतीक्षा करें
  • क्या मैं कुकी के खिलाफ मिल गया की तुलना करें
    • यदि यह मैच, रुको
    • अन्यथा, jQuery का उपयोग, गतिशील रूप से अगर एक गुच्छा आबाद <li>है में एक <उल>
  • सभी स्वरूपण करने के लिए सीएसएस का उपयोग करें
  • लाभ!

आप में से कुछ कहने के लिए जा रहे हैं, "अरे! चूंकि आप मेनू पढ़ रहे हैं वैसे भी कोई वास्तविक कैशिंग यहाँ पर जा रहा है हर एक बार.”  और तुम ठीक कह रहे हैं-मैं किसी भी प्रकार के तोड़ सर्वर नहीं दे रहा हूँ।  लेकिन renders HTML पेलोड पूरी तरह से क्योंकि कॉल async है और पृष्ठ प्रारंभिक के बाद होता है, यह "उपयोगकर्ता के लिए और अधिक उत्तरदायी लगता"।  अधिक खींचता है पृष्ठ के रूप में सुंदर मेनू renders.  यदि मेनू में परिवर्तन होता है, उपयोगकर्ता एक नर्वस पुनः आरेखित मेनू के लिए अधीन है, लेकिन केवल उस एक बार.

वहाँ कुछ तरीके इस कैशिंग और अधिक प्रभावी बनाने के लिए और एक ही समय में बाहर सर्वर मदद कर रहे हैं:

  • एक नियम है कि "कुकी"कैश की एक न्यूनतम के लिए मान्य है में डाल दिया 24 घंटे या कुछ अन्य समय सीमा. वहाँ तक है कोई समयसीमा समाप्त कुकी, कुकी मेनू स्नैपशॉट का उपयोग करें और कभी नहीं सर्वर हिट.

.. ठीक है कि सभी कि मन अभी आया है :). 

अगर किसी को किसी भी चालाक विचारों यहाँ है मैं उन्हें पता है कि प्यार होता.

और अन्त में – यह तकनीक अन्य सामान के लिए इस्तेमाल किया जा सकता है।  इस क्लाइंट पृष्ठ डेटा-संचालित चीजों की एक संख्या है विभिन्न पृष्ठों पर, उनमें से कई अपेक्षाकृत शायद ही कभी बदल रहा (एक बार एक हफ्ते या महीने में एक बार की तरह).  यदि आप कार्यक्षमता की विशिष्ट क्षेत्रों को लक्षित, आप एक और अधिक उत्तरदायी UI सामग्री स्थानीय कुकी स्टोर से खींच और तुरंत प्रतिपादन के द्वारा दे सकते हैं।  यहां तक कि अगर तुम किसी भी चक्र सर्वर की बचत नहीं कर रहे हैं यह तेजी से उपयोगकर्ता के लिए लगता है।  तुम कर सकते हैं सर्वर साइकिल इस स्थानीय कुकी कैश अमान्य करने के लिए कुछ शर्तें और ट्रिगर्स पर तय करके सहेजें।  है कि सभी स्थिति और artsy सामान और वास्तव में सबसे ज्यादा मज़ा :). 

</अंत>

undefinedमेरे ब्लॉग के लिए सदस्यता लें.

मेरे चहचहाना पर का पालन करें http://www.twitter.com/pagalvin