গুগলের হোস্ট করা jQuery ব্যবহারের সেরা উপায়, তবে গুগলে আমার হোস্ট করা লাইব্রেরিতে ব্যর্থ হয়ে পড়ে


1016

গুগলে (বা অন্যান্য গুগল হোস্ট করা লিবিস) হোস্ট করা jQuery লোড করার চেষ্টা করার একটি ভাল উপায় কী হতে পারে , তবে গুগলের প্রচেষ্টা ব্যর্থ হলে আমার jQuery এর অনুলিপিটি লোড করুন?

আমি বলছি না গুগল দুর্বল। গুগুল অনুলিপি অবরুদ্ধ রয়েছে এমন ঘটনা রয়েছে (উদাহরণস্বরূপ ইরানে স্পষ্টভাবে)।

আমি কি টাইমার সেট আপ করব এবং jQuery অবজেক্টের জন্য পরীক্ষা করব?

উভয় অনুলিপি আসার বিপদ হবে কি?

"শুধু গুগল ব্যবহার করুন" বা "কেবল নিজের নিজের ব্যবহার করুন" এর মতো উত্তরগুলির সন্ধান করা নয়। আমি এই যুক্তি বুঝতে। আমি আরও বুঝতে পারি যে ব্যবহারকারীর গুগল সংস্করণটি ক্যাশেড থাকতে পারে। আমি সাধারণভাবে মেঘের ফ্যালব্যাক সম্পর্কে ভাবছি।


সম্পাদনা করুন: এই অংশটি যুক্ত করা হয়েছে ...

যেহেতু গুগল অ্যাজাক্স লাইব্রেরিগুলি লোড করার জন্য google.load ব্যবহার করার পরামর্শ দেয় এবং এটি সম্পন্ন হয়ে গেলে একটি কলব্যাক সম্পাদন করে, আমি ভাবছি যে এটিই এই সমস্যার সিরিয়ালাইজেশনের মূল চাবিকাঠি।

আমি জানি এটি কিছুটা পাগল লাগছে। আমি এটি বের করার চেষ্টা করছি এটি নির্ভরযোগ্য উপায়ে করা যায় কিনা।


আপডেট: jQuery এখন মাইক্রোসফ্ট এর সিডিএন হোস্ট করা।

http://www.asp.net/ajax/cdn/


9
অবশ্যই প্রথম উত্তরটি ছিল "গুগল হোস্ট করা সংস্করণটি ব্যবহার করবেন না"। :-)
নসরেডনা

7
অবশ্যই এটি কারণ আপনি যদি কোনও গুরুতর ওয়েব সাইট হোস্ট করতে চান তবে আপনি অন্য কারও উপর নির্ভর করে না আপনার ফাইল হোস্ট করছেন।
ব্রায়ান মিগলিওরিসি

6
@ ব্রায়ান মিগলিওরিসি, আমার ধারণা টুইটার কি এতটা গুরুতর নয়? তবে আমি স্বীকার করি যে মাসখানেক আগে গুগল ডাউন হয়ে গেলে তাদের গুগলে সমস্যা ছিল।
আয়নু জি স্টান

18
গুগল ব্যবহার করার যোগ্যতা বা জেএস লাইব হোস্টিংয়ের জন্য নয় এটি একটি উপযুক্ত, তবে এটি অন্যান্য বেশ কয়েকটি থ্রেডে আলোচনা করা হয়েছে। আমি লোডিং বিলম্বের বিষয়ে জেএস ফ্যালব্যাক সম্পর্কিত প্রযুক্তিগত উত্তরগুলি সন্ধান করছিলাম।
নোসরেডা

2
@ জো চুং: এটির ব্যবহারকারীর সিস্টেমে ক্যাশেড হওয়ার সম্ভাবনা রয়েছে, পৃষ্ঠা লোড দ্রুততর করা। আমাকে ব্যান্ডউইদথ বাঁচায়। গুগলের সিডিএন ব্যবহার করে। ইত্যাদি
নসরেডা

উত্তর:


809

আপনি এটির মতো এটি অর্জন করতে পারেন:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>

<script>
       window.jQuery || document.write('<script src="/path/to/your/jquery"><\/script>');
</script>

এটি আপনার পৃষ্ঠায় থাকা উচিত <head>এবং কোনও jQuery প্রস্তুত ইভেন্ট হ্যান্ডলারের <body>ত্রুটিগুলি এড়াতে হওয়া উচিত (যদিও এটি নির্বোধ-প্রমাণ নয়!)।

গুগল-হোস্টেড jQuery ব্যবহার না করার আরও একটি কারণ হ'ল কিছু দেশে গুগলের ডোমেন নাম নিষিদ্ধ করা হয়েছে।


35
জাভাস্ক্রিপ্ট ডাউনলোডগুলি ইতিমধ্যে ব্লক করা (সিঙ্ক্রোনাস) নয়? আমার কাছে ডাবল-অনুলিপি সমস্যা মনে হচ্ছে তাই সমস্যা হবে না।
ম্যাট শেরম্যান

68
জাভাস্ক্রিপ্ট ডাউনলোডগুলি ইতিমধ্যে সিঙ্ক্রোনাস হওয়া উচিত, যেমন ম্যাট শেরম্যান বলেছিলেন। অন্যথায়, পৃষ্ঠাটি কোনও অর্ধ ডাউনলোড করা লাইব্রেরির উপর নির্ভর করে এমন একটি ইনলাইন স্ক্রিপ্ট কার্যকর করতে চেষ্টা করলে বা লাইব্রেরিটি সম্পূর্ণরূপে ডাউনলোড না করে এবং সম্পাদন না করে একটি লাইব্রেরি এক্সটেনশান কার্যকর করা হয় তবে অনেকগুলি সমস্যা দেখা দিতে পারে। ইয়াহু ওয়াইস্লো পৃষ্ঠাগুলির শেষে জাভাস্ক্রিপ্ট স্থাপনের পুনরাবৃত্তি করার একটি কারণও এটি; যাতে এটি অন্য পৃষ্ঠার উপাদানগুলি (স্টাইল এবং চিত্র সহ) ডাউনলোড করতে বাধা না দেয়। খুব কমপক্ষে, ব্রাউজারটি ক্রমিকভাবে ঘটতে কার্যকর করতে বিলম্ব করতে হবে।
গ্যাপল

42
একটি বৈধতাধর্মী ধর্মান্ধের কাছ থেকে ছোট ফিক্স: জাভাস্ক্রিপ্টে স্ট্রিং '</' অনুমোদিত নয়, কারণ এটি স্ক্রিপ্ট ট্যাগের শেষে (এসজিএমএল সংক্ষিপ্ত ট্যাগ স্বরলিপি) হিসাবে ভুল ব্যাখ্যা করা যেতে পারে। পরিবর্তে '<' + '/ স্ক্রিপ্ট>' করুন। চিয়ার্স,
বোল্ডউইন

8
এই উদাহরণ কাজ করবে না। 1) গুগল এজাক্স লাইব্রেরিটি উপলভ্য না হলে ব্যর্থ হওয়ার আগে প্রথমে সময় বের করতে হবে। এটি কিছুটা সময় নিতে পারে। আমার কম্পিউটারটি নেটওয়ার্ক থেকে সংযোগ বিচ্ছিন্ন করার পরীক্ষায় এটি কেবল চেষ্টা করে দেখেছিল এবং চেষ্টা করেছে এবং সময়সীমা শেষ হয়নি। 2) যদি (! JQuery) কোনও ত্রুটি ছুঁড়ে দেয় কারণ jQuery সংজ্ঞায়িত করা হয়নি তাই জাভাস্ক্রিপ্ট এটি দিয়ে কী করতে পারে তা জানে না।
রেডভলভেস

32
JQuery লোড করা হয়েছে কিনা পরীক্ষা করার জন্য, (! উইন্ডো.জিকিউয়ারি) ঠিকঠাক কাজ করে এবং টাইপফুল চেক করে সংক্ষিপ্ত করা হয়।
জার্ন জাফেরার

335

এটি করার সহজতম এবং সবচেয়ে সহজ উপায়:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="path/to/your/jquery"><\/script>')</script>

1
@jpp এর জন্য নয় XHTML 1.0এবংHTML 4.01
বেনজামিনআরএইচ

5
লোকেরা আমাকে type="text/javascript"অংশগুলি অপসারণ করতে বলছে , তাই পুরানো ব্রাউজারগুলির জন্য এইচটিএমএল লেখার লোকদের কাছে নোট করুন যে আপনাকে এখন এটি যুক্ত করতে হবে
বেঞ্জামিনআরএইচ

6
@ বেঞ্জামিনআরএইচ: type="text/javascript"পুরানো ব্রাউজারগুলিতেও অপ্রয়োজনীয় ছিল, যেহেতু তারা সকলেই জাভাস্ক্রিপ্টে ডিফল্ট হয়েছিল। সত্যিই পুরানো ব্রাউজারগুলি languageএট্রিবিউটটি দেখেছিল ; তবে তারপরেও জাভাস্ক্রিপ্টটি ডিফল্ট ছিল যদি বৈশিষ্ট্যটি অনুপস্থিত ছিল।
মার্টিজন

1
@ মার্তিজন তবে আমি চকচকে বৈধতা ব্যাজ পছন্দ করেছি :)
বেনজামিনআরএইচ

3
@ ট্রোজান পুরোপুরি সম্ভব, কেবল কলগুলি স্ট্যাক করুন। মনে রাখবেন যে এই মুহুর্তে আপনি নতুন সংযোগের হোস্টগুলি খোলেন, সুতরাং এইচটিটিপি পাইপলাইনিং সম্ভবত দ্রুত হবে। ... <script src="//cdn1.com/jquery.js"></script> <script>window.jQuery || document.write('<script src="//cdn2.com/jquery.js"><\/script>')</script> <script>window.jQuery || document.write('<script src="local/jquery.js"><\/script>')</script>
টম

76

এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে:

<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
// has the google object loaded?
if (window.google && window.google.load) {
    google.load("jquery", "1.3.2");
} else {
    document.write('<script type="text/javascript" src="http://joecrawford.com/jquery-1.3.2.min.js"><\/script>');
}
window.onload = function() {
    $('#test').css({'border':'2px solid #f00'});
};
</script>
</head>
<body>
    <p id="test">hello jQuery</p>
</body>
</html>

এটি যেভাবে কাজ করে তা হ'ল http://www.google.com/jsapigoogle কল করে সেই অবজেক্টটি অবজেক্টটিতে লোড করা হয় । যদি সেই বস্তুটি উপস্থিত না থাকে, আমরা ধরে নিচ্ছি যে গুগলে অ্যাক্সেস ব্যর্থ হচ্ছে। যদি এটি হয় তবে আমরা একটি স্থানীয় কপি ব্যবহার করে লোড করি । (আমি এই ক্ষেত্রে আমার নিজস্ব সার্ভার ব্যবহার করছি, দয়া করে এটি পরীক্ষার জন্য আপনার নিজের ব্যবহার করুন)।windowdocument.write

আমি উপস্থিতির জন্যও পরীক্ষা window.google.loadকরি - typeofজিনিসগুলি উপযুক্ত জিনিস বা জিনিস হিসাবে উপযুক্ত তা দেখার জন্য আমি একটি চেকও করতে পারি । তবে আমি মনে করি এটি কৌশলটি করে।

আমি কেবল লোডিং যুক্তি এখানে রেখেছি, যেহেতু আমি পুরো HTML পৃষ্ঠাটি পরীক্ষা করে যাচ্ছি তাই কোড হাইলাইটিং ব্যর্থ হতে পারে:

if (window.google && window.google.load) {
    google.load("jquery", "1.3.2");
} else {
    document.write('<script type="text/javascript" src="http://joecrawford.com/jquery-1.3.2.min.js"><\/script>');
}

যদিও আমাকে অবশ্যই বলতে হবে, আমি নিশ্চিত নই যে এটি যদি আপনার সাইটের দর্শকদের জন্য উদ্বেগজনক হয় তবে আপনাকে Google AJAX লাইব্রেরি এপিআই দিয়ে মোটামুটি বিচলিত হওয়া উচিত ।

মজাদার ঘটনা : আমি প্রাথমিকভাবে চেষ্টা করেছিলাম। বিভিন্ন সংস্করণে এটির জন্য ব্লকটি ধরুন তবে এর মতো পরিষ্কার একটি সমন্বয় খুঁজে পেলাম না। আমি এই ধারণাটির অন্যান্য বাস্তবায়নগুলি দেখতে নিখুঁত অনুশীলন হিসাবে আগ্রহী


1
রনির পরামর্শ মতো, সরাসরি এজ্যাক্স এগ্রিকেশনস / এজ্যাক্স / লিবস / জ্যাকারি / ১.৩.২ / জেকারি.মিন.জেগুলি লোড না করে এই পরিস্থিতিতে গুগল.লোড ব্যবহারের কী সুবিধা? আমার মনে হয় এটি লোড করা সরানো লাইব্রেরিগুলিতেও সরাসরি সমস্যাগুলি ধরে ফেলবে (গুগল জিকুয়েরি ১.৩.২ পরিবেশন বন্ধ করে দিলে কী হবে)। তদ্ব্যতীত, রনির সংস্করণটি নেটওয়ার্ক সমস্যার পরে www.google.com/jsapi এনেছে, বিশেষত যখন জাসাপি ক্যাশে থেকে লোড করা হয়েছে? একজনকে অবশ্যই নিশ্চিত হতে google.load কলব্যাক ব্যবহার করার প্রয়োজন হতে পারে (অথবা যদি (..)) এর মধ্যে গুগল.ল্ড অন্তর্ভুক্ত করার জন্য কিছু রিটার্ন মান রয়েছে।
আরজান

যদি কেউ গুগল.কমের উপস্থিতির জন্য পরীক্ষা করে থাকে, কেউ একটি নেটওয়ার্ক কল করতে পারে বা কেউ "গেটকিপার" অবজেক্টের উপস্থিতি যাচাই করতে পারে। আমি যা করছি তা হ'ল গুগল অবজেক্ট এবং এর "লোড" ফাংশনটি পরীক্ষা করা। যদি এই দুজনেই ব্যর্থ হয় তবে কোনও গুগল নেই এবং আমার স্থানীয় সংস্করণ প্রয়োজন। রনির সংস্করণটি আসলে www.google.com/jsapi URL টি পুরোপুরি উপেক্ষা করে, তাই আপনি নিশ্চিত হন না যে আপনি কেন এটি নির্দেশিত করেছিলেন তা নিশ্চিত নয়।
আর্টলুং

শেষ পর্যন্ত, যা যা প্রয়োজন তা হ'ল jquery লাইব্রেরি লোড করা। কোনও গুগল লাইব্রেরির প্রয়োজন হয় না। রনির উত্তরে গুগল থেকে লোড করা (বা ক্যাশে) সফল হয়েছে কিনা তা নিশ্চিতভাবেই কেউ জানে। তবে "if (উইন্ডো এবং & উইন্ডো.google.load)" এর জন্য আপনার চেকটিতে, jquery লাইব্রেরি এখনও লোড করা হয়নি। Jquery লাইব্রেরির আসল লোডিং বৈধ নয়?
আরজান

আহ, আমি কীভাবে বিভ্রান্তির সৃষ্টি করেছি তা আমি দেখতে পাচ্ছি। "রনির সংস্করণটি নেটওয়ার্ক সমস্যার পরে www.google.com/jsapi এনেছে" তারপরে আরও ভালভাবে পড়তে হবে: "আপনার সংস্করণটি নেটওয়ার্ক সমস্যাগুলি লক্ষ্য করে না, তারপরে www.google.com/jsapi এনেছে"।
আরজান

2
আমরা সম্প্রতি গুগলকে আমাদের jQuery হোস্ট হিসাবে ব্যবহার করতে চলেছি; যদি আমরা অবরুদ্ধ ব্যবহারকারীদের কাছ থেকে কোনও বাগের প্রতিবেদন পাই তবে আমি আমাদের ক্লায়েন্ট কোডটি রিফ্যাক্টর করতে আপনার উত্তরের একটি বৈকল্পিক ব্যবহার করব। ভাল উত্তর!
টেকনোলজি ডিক্সন

30

যদি আপনার সাইটে আধুনিকিজ.আর.জেস এম্বেড থাকে তবে আপনি নিজের স্ক্রিপ্টগুলি অবিচ্ছিন্নভাবে লোড করতে অন্তর্নির্মিত yepnope.js ব্যবহার করতে পারেন - অন্যদের মধ্যে jQuery (ফ্যালব্যাক সহ)।

Modernizr.load([{
    load : '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'
},{
    test : window.jQuery,
    nope : 'path/to/local/jquery-1.7.2.min.js',
    both : ['myscript.js', 'another-script.js'],
    complete : function () {
        MyApp.init();
    }
}]);

এটি গুগল-সিডিএন থেকে jQuery লোড করে। এরপরে এটি পরীক্ষা করা হয়েছে, যদি jQuery সফলভাবে লোড করা হয়। ("নাপ") না থাকলে স্থানীয় সংস্করণ লোড হয়। এছাড়াও আপনার ব্যক্তিগত স্ক্রিপ্টগুলি লোড হয়েছে - "উভয়" ইঙ্গিত দেয় যে পরীক্ষার ফলাফল থেকে লোড-প্রক্রিয়াটি স্বাধীনভাবে প্রবর্তিত হয়।

সমস্ত লোড-প্রক্রিয়াগুলি সম্পূর্ণ হয়ে গেলে, 'মাইএপ.ইন.ইনাইট' ক্ষেত্রে একটি ফাংশন কার্যকর করা হয়।

আমি ব্যক্তিগতভাবে অ্যাসিক্রোনাস স্ক্রিপ্ট লোড করার এই পদ্ধতিটিকে পছন্দ করি। এবং যেমন আমি কোনও সাইট নির্মাণের সময় মডার্নিজারের সরবরাহকৃত বৈশিষ্ট্য-পরীক্ষার উপর নির্ভর করি, যাইহোক এটি আমার সাইটে এম্বেড করা আছে। সুতরাং আসলে কোন ওভারহেড নেই।


2
আমি মনে করি আপনি প্রশ্নের বিন্দুটি মিস করছেন - আপনি কীভাবে কোনও সিডিএন থেকে মুরনিজার স্ক্রিপ্টটি লোড করবেন?
জর্জ ফিলিপাকোস

2
আমি সিডিএন থেকে মডার্নিজার লোড করার প্রস্তাব দিতে পারি না। বরং আধুনিকীকরণ ডটকম থেকে সবচেয়ে ছোট কাস্টম বিল্ডটি পাওয়া উচিত।
ইমানুয়েল ক্লুজ

2
সুতরাং এই বিকল্পটি 500/200 + এর সাথে তুলনা করে অন্যান্য বিকল্পগুলি পেয়েছে +16। তবে এটি বেশ ভাল লাগছে। মডার্নাইজারের উপর নির্ভর করার কারণে এটি কি জনপ্রিয় নয়? আমি যাইহোক আমাদের সাইটে মডার্নাইজার ব্যবহার করার ঘটনা ঘটি, তাই যদি অন্য উত্তরের চেয়ে এটি আরও ভাল হয় তবে কেউ কি আমাকে জানাতে পারেন? আমি জ্যাকুয়ারিতে বেশ নতুন, তাই স্পষ্টতা প্রশংসিত হয়।
redfox05

2
উত্তরের সময় এটি একটি খুব ভাল বিকল্প ছিল, তবে ২০১৫ সালের হিসাবে, yepnope.jsহ্রাস করা হয়েছে। দেখতে stackoverflow.com/questions/33986561/...
Obmerk Kronen

এই প্রশ্নের মতোই সমস্যা সমাধানের জন্য মডার্নজার তৈরি করা হয়েছিল। +1
কার্লোস কুইজানো

21

এখানে কিছু দুর্দান্ত সমাধান রয়েছে তবে আমি স্থানীয় ফাইল সম্পর্কিত এটি আরও একধাপ এগিয়ে নিয়ে যেতে চাই।

একটি দৃশ্যে যখন গুগল ব্যর্থ হয় না তখন এটি একটি স্থানীয় উত্স লোড করা উচিত তবে সার্ভারে কোনও শারীরিক ফাইল সম্ভবত সর্বোত্তম বিকল্প নয়। আমি এটি এনেছি কারণ আমি বর্তমানে একই সমাধানটি প্রয়োগ করছি, কেবলমাত্র আমি কোনও স্থানীয় ফাইলে ফিরে যেতে চাই যা ডেটা উত্স দ্বারা উত্পন্ন হয়।

এর জন্য আমার কারণগুলি হ'ল আমি যখন গুগল বনাম আমি স্থানীয় সার্ভারে যা রাখি তার থেকে আমি কী লোড করি সে সম্পর্কে নজর রাখার সময় আমি কিছুটা মনের কথা রাখতে চাই। আমি যদি সংস্করণগুলি পরিবর্তন করতে চাই তবে আমি আমার স্থানীয় অনুলিপিটি গুগল থেকে লোড করার চেষ্টা করছি তার সাথে সিঙ্ক করে রাখতে চাই। এমন পরিবেশে যেখানে অনেক বিকাশকারী রয়েছে, আমি মনে করি এই প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে চালিত করার পক্ষে সর্বোত্তম পন্থা হ'ল যাতে সকলকেই একটি কনফিগারেশন ফাইলের সংস্করণ নম্বর পরিবর্তন করতে হয়।

এখানে আমার প্রস্তাবিত সমাধান যা তত্ত্বের ক্ষেত্রে কাজ করা উচিত:

  • একটি অ্যাপ্লিকেশন কনফিগারেশন ফাইলে, আমি 3 টি জিনিস সংরক্ষণ করব: গ্রন্থাগারের জন্য নিখুঁত URL, জাভাস্ক্রিপ্ট API এর URL এবং সংস্করণ নম্বর
  • একটি ক্লাস লিখুন যা গ্রন্থাগারের ফাইলের সামগ্রীগুলি নিজেই পায় (অ্যাপ্লিকেশন কনফিগারেশন থেকে ইউআরএল পায়), নাম এবং সংস্করণ নম্বর সহ এটি আমার ডেটাসোর্সে সঞ্চয় করে
  • একটি হ্যান্ডলার লিখুন যা আমার স্থানীয় ফাইলটিকে ডিবি থেকে বের করে দেয় এবং সংস্করণ নম্বর পরিবর্তন না হওয়া পর্যন্ত ফাইলটিকে ক্যাশে করে।
  • যদি এটি পরিবর্তিত হয় (আমার অ্যাপ্লিকেশন কনফিগারেশনে), আমার ক্লাসটি সংস্করণ সংখ্যার উপর ভিত্তি করে ফাইলের সামগ্রীগুলি টানবে, এটি আমার ডেটাসোর্সে একটি নতুন রেকর্ড হিসাবে সংরক্ষণ করবে, তারপরে হ্যান্ডলারটি নতুন সংস্করণটি প্রবেশ করবে এবং পরিবেশন করবে।

তত্ত্ব অনুসারে, আমার কোডটি যদি সঠিকভাবে লেখা হয় তবে আমার অ্যাপ্লিকেশন কনফিগারেশনের সংস্করণ নম্বরটি পরিবর্তন করতে হবে তবে ভায়োলা! আপনার একটি ফ্যালব্যাক সমাধান রয়েছে যা স্বয়ংক্রিয় হয় এবং আপনাকে আপনার সার্ভারে শারীরিক ফাইলগুলি বজায় রাখতে হয় না।

সবাই কী ভাবেন? হতে পারে এটি ওভারকিল, তবে এটি আপনার এজেএক্স লাইব্রেরিগুলি রক্ষণাবেক্ষণের জন্য একটি মার্জিত পদ্ধতি হতে পারে।

ত্তক্ বৃক্ষের ফল


আপনি যদি সমস্ত কাজটি কেবল jQuery এর জন্য করে থাকেন তবে আমি বলব এটি ওভারকিল। তবে, আপনার অ্যাপ্লিকেশনের অন্যান্য টুকরাগুলির জন্য যদি ইতিমধ্যে আপনার কাছে সেই উপাদানগুলির কিছু রয়েছে (যেমন আপনি যদি ইতিমধ্যে কোনও ডিবি থেকে স্ক্রিপ্টগুলি লোড করেন) তবে এটি দেখতে খুব সুন্দর দেখাচ্ছে।
মাইকেল হরেন

1
পুরোপুরি উপন্যাস হওয়ার জন্য +1, যদিও আমি নিশ্চিত নই যে সুবিধাটি সময় এবং জটিলতার ন্যায্যতা প্রমাণ করে।
কোরি হাউস

20
if (typeof jQuery == 'undefined') {
// or if ( ! window.jQuery)
// or if ( ! 'jQuery' in window)
// or if ( ! window.hasOwnProperty('jQuery'))    

  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = '/libs/jquery.js';

  var scriptHook = document.getElementsByTagName('script')[0];
  scriptHook.parentNode.insertBefore(script, scriptHook);

}

আপনি সিডিএন থেকে গুগলের অনুলিপি অন্তর্ভুক্ত করার চেষ্টা করার পরে।

এইচটিএমএল 5 এ, আপনাকে typeঅ্যাট্রিবিউট সেট করার দরকার নেই ।

আপনি ব্যবহার করতে পারেন ...

window.jQuery || document.write('<script src="/libs/jquery.js"><\/script>');

2
+1 আরও পরিষ্কার দেখায়। শীর্ষে একটি ছোটখাটো টাইপো রয়েছে যা আমি পরিষ্কার করতে পারছি না কারণ '
অপরিশোধিত

1
প্রথম বিকল্পটি ক্রোম সতর্কতা [Violation] Avoid using document.write().
বব স্টেইন

প্রথম বিকল্প, দুর্ভাগ্যবশত, লোড বলে মনে হচ্ছে না সিঙ্ক্রোনাস । দ্বিতীয় বিকল্প আছে
বব স্টেইন

10

আপনি আপনার স্থানীয় ফাইলটি একটি শেষ অবলম্বন হিসাবে ব্যবহার করতে চাইতে পারেন।

এখন পর্যন্ত মনে হচ্ছে jQuery এর নিজস্ব সিডিএন https সমর্থন করে না। এটি যদি আপনি করেন তবে প্রথমে সেখান থেকে লোড করতে চান।

সুতরাং এখানে ক্রমটি রয়েছে: গুগল সিডিএন => মাইক্রোসফ্ট সিডিএন => আপনার স্থানীয় অনুলিপি।

<!-- load jQuery from Google's CDN -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<!-- fallback to Microsoft's Ajax CDN -->
<script> window.jQuery || document.write('<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js">\x3C/script>')</script> 
<!-- fallback to local file -->
<script> window.jQuery || document.write('<script src="Assets/jquery-1.8.3.min.js">\x3C/script>')</script> 

সত্যিই কি একাধিক ফ্যালব্যাকের প্রয়োজন আছে? যদি উভয়ই অফলাইনে থাকে তবে ব্যবহারকারীরা আপনার সাইটটি দেখার আগে এক মিনিটেরও বেশি অপেক্ষা করবে
জর্জ ফিলিপোকোস

1
স্ক্রিপ্টটি লোড হতে ব্যর্থ হতে 1 মিনিট সময় নেয় না, এটি করে।
এডওয়ার্ড ওলামিসান

@ জিও1701 এবং এডওয়ার্ড, সত্যই কোনও তৃতীয়াংশের প্রয়োজন নেই। এমনকি একটি ফ্যালব্যাক এখনও নির্ভরযোগ্য প্রমাণিত হয়নি। যদি গুগল এপিআই বন্ধ থাকে তবে প্রথম প্রচেষ্টাটি মোটেই ব্যর্থ হবে এমন কোনও গ্যারান্টি আমি এখনও দেখিনি। আমি একটি কেস দৃশ্যের অভিজ্ঞতা পেয়েছি যেখানে এখানে সিডিএন কখনও লোড করতে ব্যর্থ হয় নি, পৃষ্ঠাটি কখনও রেন্ডারিং থেকে ধরে রাখা হয়েছে, এখানে উল্লিখিত হিসাবে স্টিভসওয়ার্ডারস
ব্লগ

6

শর্তসাপেক্ষে সর্বশেষ / লেগ্যাসি jQuery সংস্করণ এবং ফলব্যাক লোড করুন:

<!--[if lt IE 9]>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="/public/vendor/jquery-legacy/dist/jquery.min.js">\x3C/script>')</script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="/public/vendor/jquery/dist/jquery.min.js">\x3C/script>')</script>
<!--<![endif]-->

এটি ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ নয়।
জোশ হাবদাস

জোশ, হ্যাঁ, এটা।
নিকের

5
  • পদক্ষেপ 1: jQuery লোড করতে ব্যর্থ হয়েছে? ( jQueryপরিবর্তনশীল পরীক্ষা করুন)

জাভাস্ক্রিপ্টে একটি সংজ্ঞায়িত পরিবর্তনশীল কীভাবে চেক করবেন

  • পদক্ষেপ 2: গতিশীলভাবে জাভাস্ক্রিপ্ট ফাইল আমদানি করুন (ব্যাকআপ)

অন্য জাভাস্ক্রিপ্ট ফাইলে আমি কীভাবে একটি জাভাস্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করব?



4

এখানে এই সম্পর্কে একটি দুর্দান্ত ব্যাখ্যা!

বিলম্ব এবং সময়সীমা লোড কার্যকর করে!

http://happyworm.com/blog/2010/01/28/a-simple-and-robust-cdn-failover-for-jquery-14-in-one-line/


কেবল লিঙ্কযুক্ত উত্তরগুলি কার্যকর নয় এবং নিম্ন মানের হিসাবে বিবেচিত হয়। উত্সটিতে অবশ্যই এট্রিবিউশন সহ আপনার উত্তরটিতে প্রাসঙ্গিক বিটগুলি অনুলিপি করার বিষয়ে বিবেচনা করুন।
এলোমেলো_ ব্যবহারকারীর_নাম

আপনি কি মজা করছেন? এই উত্তরটি 7 বছরেরও বেশি পুরানো, সুতরাং এই জাতীয় মন্তব্যটি অযৌক্তিক।
স্টুয়ার্ট.স্ক্লিনার

হ্যাঁ, এটি একটি পুরানো উত্তর। যদিও তাদের পরামর্শটি বৈধ। যে উত্তরগুলি অন্যত্র কেবল লিঙ্ক, সেগুলি মুছে ফেলার প্রার্থী। আরও পাঠক: meta.stackoverflow.com/q/8259
রব

আমি সম্পূর্ণরূপে একমত, আমি নিজেই পরামর্শ দিয়ে মধ্যস্থতা করব - তবে এটি 7 বছর পরে এটি অর্থহীন। এটি 7 বছর আগে নয়, 7 বছর আগে যেমন মডারেট করা উচিত ছিল।
স্টুয়ার্ট.স্ক্লিনার

1
@ স্টুয়ার্ট.স্ক্লিনার - আমি যদি 7 বছর আগে এটি দেখতে পেতাম, তবে আমি অবশ্যই থাকতাম :) আমি এখানে নিজেকে কিছু গবেষণা করে দেখতে পেয়েছি এবং এটি প্রথমবারের মতো দেখতে পেয়েছি। আপনাকে হতাশ করার জন্য দুঃখিত - আমি মনে করি এসও তে আমাদের কাজগুলি সাইটের
স্টিওয়ার

4

এএসপি.নেট এমভিসি 5 ব্যবহার করা লোকদের জন্য, jquery এর জন্য সিডিএন সক্ষম করতে আপনার বান্ডেলকনফিগ। সিগুলিতে এই কোডটি যুক্ত করুন:

bundles.UseCdn = true;
Bundle jqueryBundle = new ScriptBundle("~/bundles/jquery", "//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js").Include("~/Scripts/jquery-{version}.js");
jqueryBundle.CdnFallbackExpression = "window.jQuery";
bundles.Add(jqueryBundle);

4

আপডেট:
এই উত্তরটি ভুল হয়ে গেছে। আসল ব্যাখ্যার জন্য মন্তব্য দেখুন।


আপনার বেশিরভাগ প্রশ্নের উত্তর দেওয়া হয়েছে তবে চূড়ান্ত অংশ হিসাবে:

উভয় অনুলিপি আসার বিপদ হবে কি?

সত্যিই কেউ না। আপনি ব্যান্ডউইদথ নষ্ট করবেন, দ্বিতীয় অকেজো অনুলিপি ডাউনলোড করতে কিছু মিলিসেকেন্ড যুক্ত হতে পারে, তবে যদি তারা উভয়ই আসে তবে প্রকৃত ক্ষতি হবে না। আপনার অবশ্যই অবশ্যই উপরে বর্ণিত কৌশলগুলি ব্যবহার করে এড়ানো উচিত।


5
প্রকৃতপক্ষে, এই প্রশ্ন অনুসারে jQuery দুইবার লোড করা প্রচুর সমস্যার কারণ হতে পারে ।
শ্যাডোক্যাটাক

কেন আপনি নিজে এটি পরীক্ষা করেন না এবং ম্যানুয়ালি jquery লাইব্রেরিটি দুবার লোড করুন। তাহলে উত্তরটি প্রকাশিত হবে।
luke_mclachlan

ঠিক এত ভুল কেন? @ শ্যাডো গুগল 7 এটির কারণে তৈরি সমস্যাগুলির বিষয়ে আপনি আরও সুনির্দিষ্ট হতে পারেন? আপনি যে লিঙ্ক করেছেন এমন প্রশ্নের মধ্যে আমি স্পষ্টরূপে চিহ্নিত হওয়া সমস্যাটি হ'ল "সমস্ত লোড হওয়া প্লাগইনগুলি সাফ করা"। তবে একই জ্যাকুয়ারি ফাইলটি দু'বার পিছনে পিছনে লোড করার জন্য প্রয়োগ করা উচিত নয়, তাই না? আমি জিজ্ঞাসা করলাম কারণ স্থানীয় ফ্যালব্যাকের অন্যান্য সমাধানগুলি এতটাই সংশ্লেষিত এবং ডকুমেন্ট.রাইট কিছু জায়গায় খারাপ হিসাবে ম্যালেন্ড করা হয়েছে ।
বব স্টেইন

2

আমি একটি গিস্ট তৈরি করেছি যা জিকিউরিটি ইতিমধ্যে লোড না হলে গতিশীলভাবে লোড করা উচিত, এবং যদি উত্সটি ব্যর্থ হয় তবে এটি ফলব্যাকগুলিতে এগিয়ে যায় (অনেক উত্তর থেকে একসাথে সেলাই করা হয়): https://gist.github.com/tigerhawkvok/9673154

দয়া করে নোট করুন আমি গিস্টটি আপডেট রাখার পরিকল্পনা করছি তবে এই উত্তরটি নয়, এটির মূল্য কী!

/* See https://gist.github.com/tigerhawkvok/9673154 for the latest version */
function cascadeJQLoad(i) { // Use alternate CDNs where appropriate to load jQuery
    if (typeof(i) != "number") i = 0;
    // the actual paths to your jQuery CDNs
    var jq_paths = [
        "ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js",
        "ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.0.min.js"
    ];
    // Paths to your libraries that require jQuery
    var dependent_libraries = [
        "js/c.js"
    ];
    if (window.jQuery === undefined && i < jq_paths.length) {
        i++;
        loadJQ(jq_paths[i], i, dependent_libraries);
    }
    if (window.jQuery === undefined && i == jq_paths.length) {
        // jQuery failed to load
        // Insert your handler here
    }
}

/***
 * You shouldn't have to modify anything below here
 ***/

function loadJQ(jq_path, i, libs) { //load jQuery if it isn't already
    if (typeof(jq_path) == "undefined") return false;
    if (typeof(i) != "number") i = 1;
    var loadNextJQ = function() {
        var src = 'https:' == location.protocol ? 'https' : 'http';
        var script_url = src + '://' + jq_path;
        loadJS(script_url, function() {
            if (window.jQuery === undefined) cascadeJQLoad(i);
        });
    }
    window.onload = function() {
        if (window.jQuery === undefined) loadNextJQ();
        else {
            // Load libraries that rely on jQuery
            if (typeof(libs) == "object") {
                $.each(libs, function() {
                    loadJS(this.toString());
                });
            }
        }
    }
    if (i > 0) loadNextJQ();
}

function loadJS(src, callback) {
    var s = document.createElement('script');
    s.src = src;
    s.async = true;
    s.onreadystatechange = s.onload = function() {
        var state = s.readyState;
        try {
            if (!callback.done && (!state || /loaded|complete/.test(state))) {
                callback.done = true;
                callback();
            }
        } catch (e) {
            // do nothing, no callback function passed
        }
    };
    s.onerror = function() {
        try {
            if (!callback.done) {
                callback.done = true;
                callback();
            }
        } catch (e) {
            // do nothing, no callback function passed
        }
    }
    document.getElementsByTagName('head')[0].appendChild(s);
}

/*
 * The part that actually calls above
 */

if (window.readyState) { //older microsoft browsers
    window.onreadystatechange = function() {
        if (this.readyState == 'complete' || this.readyState == 'loaded') {
            cascadeJQLoad();
        }
    }
} else { //modern browsers
    cascadeJQLoad();
}

2

গুগল হোস্টেড জিকুয়েরি

  • আপনি যদি পুরানো ব্রাউজারগুলি সম্পর্কে চিন্তা করেন তবে প্রাথমিকভাবে আই 9 এর পূর্বে আইই এর সংস্করণগুলি, এটি সর্বাধিক বিস্তৃত উপযুক্ত
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  • আপনি যদি ওল্ডআইই সম্পর্কে চিন্তা না করেন তবে এটি ছোট এবং দ্রুত:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

ব্যাকআপ / ফলব্যাক পরিকল্পনা!

  • যেভাবেই হোক, গুগল সিডিএন ব্যর্থ (অসম্ভাব্য) বা ইরান বা কখনও কখনও চীনের মতো আপনার ব্যবহারকারীরা আপনার সাইটে (সামান্য বেশি সম্ভাবনা) থেকে অ্যাক্সেস করে এমন কোনও স্থানে অবরুদ্ধ থাকলে আপনার লোকালকে ফ্যালব্যাক ব্যবহার করা উচিত।
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>if (!window.jQuery) { document.write('<script src="/path/to/your/jquery"><\/script>'); }
</script>

তথ্যসূত্র: http://websitespeedoptimizations.com/ কনটেন্টডেলিভারি নেটওয়ার্কপোস্ট.এএসপিএক্স


অনিরাপদ প্রোটোকলের উপর নোট লোড করা স্ক্রিপ্টগুলি একটি এক্সএসএস আক্রমণ ভেক্টরটি খুলবে।
জোশ হাবদাস

2

আমি বিবেচনা করি যে স্ট্রিংয়ে সর্বশেষ <থেকে 3 x3 সি অব্যাহতি দেওয়া উচিত। ব্রাউজারটি দেখলে এটি এটিকে স্ক্রিপ্ট ব্লকের সমাপ্তি হিসাবে বিবেচনা করে (যেহেতু এইচটিএমএল পার্সার জাভাস্ক্রিপ্ট সম্পর্কে কোনও ধারণা রাখে না, এটি কোনও স্ট্রিং-এ প্রদর্শিত কিছুটির মধ্যে পার্থক্য করতে পারে না এবং এটি আসলে স্ক্রিপ্টটি শেষ করার জন্য বোঝানো হয়) উপাদান)। সুতরাং একটি HTML পৃষ্ঠার অভ্যন্তরে জাভাস্ক্রিপ্টে আক্ষরিক উপস্থিতি ত্রুটি ঘটায় এবং (সবচেয়ে খারাপ ক্ষেত্রে) একটি বিশাল সুরক্ষা গর্ত হবে।

<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js"></script>
<script>window.jQuery || document.write('<script src="js/jquery-2.0.0.min.js">\x3C/script>')</script>

2
if (typeof jQuery == 'undefined')) { ...

অথবা

if(!window.jQuery){

সিডিএন সংস্করণ লোড না হলে কাজ করবে না, কারণ ব্রাউজারটি এই শর্তটি দিয়ে চলবে এবং এটির পরেও জাভাস্ক্রিপ্টের বাকী অংশগুলি ডাউনলোড করার জন্য যা jQuery প্রয়োজন এবং এটি ত্রুটি ফেরায়। সমাধানটি ছিল সেই অবস্থার মধ্য দিয়ে স্ক্রিপ্টগুলি লোড করা।

    <script src="http://WRONGPATH.code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script><!--  WRONGPATH for test-->
  <script type="text/javascript">
  function loadCDN_or_local(){
    if(!window.jQuery){//jQuery not loaded, take a local copy of jQuery and then my scripts
      var scripts=['local_copy_jquery.js','my_javascripts.js'];
      for(var i=0;i<scripts.length;i++){
      scri=document.getElementsByTagName('head')[0].appendChild(document.createElement('script'));
      scri.type='text/javascript';
      scri.src=scripts[i];
    }
  }
  else{// jQuery loaded can load my scripts
    var s=document.getElementsByTagName('head')[0].appendChild(document.createElement('script'));
    s.type='text/javascript';
    s.src='my_javascripts.js';
  }
  }
  window.onload=function(){loadCDN_or_local();};
  </script>

গুগল ক্রোমে স্ক্রিপ্টগুলি পরীক্ষা করতে আমি একটি সমস্যা পেয়েছি - ক্যাশে। সুতরাং স্থানীয় পরীক্ষার জন্য অন্য বিভাগে src প্রতিস্থাপন করুন s.src = 'my_javascriptts.js' + '?' + ম্যাথ.ফ্লুর (ম্যাথ.র্যান্ডম () * 10001) এর মতো কিছু দিয়ে;
মিরেক কমেরেক

সিডিএন সংস্করণ লোড না হলে অ্যালেক্সের উত্তর কাজ করবে না, কারণ ব্রাউজারটি এই অবস্থার মধ্য দিয়ে চলতে থাকবে এবং এরপরে বাকি জাভাস্ক্রিপ্টগুলি ডাউনলোড করার জন্য যা জ্যাকুয়ের প্রয়োজন এবং এটি ত্রুটি ফিরিয়ে দেবে -> জাভাস্ক্রিপ্ট ফাইল ডাউনলোড করা হচ্ছে পরবর্তী কোডটির কোডটি চালানো থেকে আটকাবে সুতরাং এটি কোনও সমস্যা নয়
অ্যালেক্স

2

প্রায় সমস্ত পাবলিক সিডিএন বেশ নির্ভরযোগ্যভাবে হয়। তবে, আপনি যদি অবরুদ্ধ গুগল ডোমেন সম্পর্কে চিন্তিত হন তবে আপনি কেবল বিকল্প জিকুয়ের সিডিএন-তে ফ্যালব্যাক করতে পারেন । তবে, এই জাতীয় ক্ষেত্রে, আপনি এটি বিপরীত উপায়ে করতে পছন্দ করতে পারেন এবং ব্যর্থ অনুরোধ এবং অপেক্ষার সময় এড়াতে গুগল সিডিএন-এ আপনার পছন্দসই বিকল্প হিসাবে এবং অন্য কিছু সিডিএন ব্যবহার করতে পারেন:

<script src="https://pagecdn.io/lib/jquery/3.2.1/jquery.min.js"></script>
<script>
   window.jQuery || document.write('<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"><\/script>');
</script>

1

ASP.NET এ রেজার সিনট্যাক্স ব্যবহার করে, এই কোডটি ফ্যালব্যাক সমর্থন সরবরাহ করে এবং ভার্চুয়াল রুটের সাথে কাজ করে:

@{var jQueryPath = Url.Content("~/Scripts/jquery-1.7.1.min.js");}
<script type="text/javascript">
    if (typeof jQuery == 'undefined')
        document.write(unescape("%3Cscript src='@jQueryPath' type='text/javascript'%3E%3C/script%3E"));
</script>

অথবা একটি সহায়ক (সহায়তা ওভারভিউ ) করুন:

@helper CdnScript(string script, string cdnPath, string test) {
    @Html.Raw("<script src=\"http://ajax.aspnetcdn.com/" + cdnPath + "/" + script + "\" type=\"text/javascript\"></script>" +
        "<script type=\"text/javascript\">" + test + " || document.write(unescape(\"%3Cscript src='" + Url.Content("~/Scripts/" + script) + "' type='text/javascript'%3E%3C/script%3E\"));</script>")
}

এবং এটি এর মতো ব্যবহার করুন:

@CdnScript("jquery-1.7.1.min.js", "ajax/jQuery", "window.jQuery")
@CdnScript("jquery.validate.min.js", "ajax/jquery.validate/1.9", "jQuery.fn.validate")

আমি রাজো সম্পর্কে হৃদয় করেছি, কিন্তু এটি, আর বদলে একটি obfuscator মত দেখায় ব্যতীত জন্য এটি কোড তোলে খাটো (এটা দুইবার হিসাবে হিসাবে দীর্ঘ এই
maaartinus

@ মাআর্টিনাস: এটি আপেল থেকে আপেলের তুলনা নয়। বেঞ্জামিনআরএইচের উত্তর, যা আপনি উল্লেখ করেছেন, এটি একটি সিডিএন-দ্বারা পরিচালিত স্ক্রিপ্টের জন্য। সহায়ক সহ CdnScript, আপনার প্রতি স্ক্রিপ্টে কোডের একটি লাইন প্রয়োজন । আপনার কাছে যত স্ক্রিপ্ট রয়েছে তত বেশি অর্থ প্রদান।
এডওয়ার্ড ব্রে

অবশ্যই ... এটি একটি ছদ্মবেশ ছিল। তবে, আমি অনুমান করি যে এটি সর্বোত্তম উপায় নয়। যদি কিছু ব্যর্থ হয় তবে আমি সিডিএনকে সম্পূর্ণ উপেক্ষা করব এবং সমস্ত স্ক্রিপ্টগুলির জন্য ফ্যালব্যাকে স্যুইচ করব। আমি নিশ্চিত না যে এটি করণীয় কিনা কারণ আমি জানি না লোডিংটি ঠিক কীভাবে কাজ করে।
মার্টিনাস

@ মাআর্টিনাস: যেহেতু প্রতিটি সিডিএন স্ক্রিপ্ট লোড স্বাধীনভাবে ব্যর্থ হতে পারে, তাই আপনাকে প্রতিটি লোড আলাদাভাবে পরীক্ষা করতে হবে। স্থানীয়ভাবে সিডিএন বনাম সমস্ত স্ক্রিপ্ট লোড করার পরে একটি সিডিএন চেকের কোনও নির্ভরযোগ্য পদ্ধতি নেই।
এডওয়ার্ড ব্রে

যে বিষয়টি আমাকে চিন্তিত করে তোলে তা হ'ল সিডিএন সাইটের ব্যর্থতা যা অনেক বোঝার জন্য অপেক্ষা করে to তাই আমি এর মতো কিছু করতে চাই try { for (Script s : ...) cdnLoad(s); } catch (...) { for (Script s : ...) ownLoad(s); }। এর একগুচ্ছ এ অনুবাদ করা ifদুঃস্বপ্ন হতে পারে।
maaartinus

1

যদিও document.write("<script></script>")jQuery ব্যাক অফের জন্য লেখা সহজ মনে হচ্ছে, ক্রোম সেই ক্ষেত্রে বৈধতা ত্রুটি দেয়। সুতরাং আমি "স্ক্রিপ্ট" শব্দটি ভাঙ্গা পছন্দ করি। সুতরাং এটি উপরের মতো নিরাপদ হয়ে ওঠে।

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>
<script>if (typeof jQuery === "undefined") {
   window.jqFallback = true;
   document.write("<scr"+"ipt src='http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js'></scr"+"ipt>");
} </script>

দীর্ঘমেয়াদী সমস্যার জন্য, জিকুয়েরি ফলব্যাকগুলি লগ করা ভাল be উপরের কোডে, যদি প্রথম সিডিএন না পাওয়া যায় তবে অন্য সিডিএন থেকে জ্যাকুয়ারি লোড করা হয়। তবে আপনি সেই ভ্রান্ত সিডিএন জানতে এবং এটি স্থায়ীভাবে মুছে ফেলতে চাইতে পারেন। (এই ক্ষেত্রেটি খুব ব্যতিক্রমী ক্ষেত্রে) এছাড়াও ফ্যালব্যাক সংক্রান্ত সমস্যাগুলি লগ করা ভাল। সুতরাং আপনি এজেএক্স এর সাথে ভুল কাজগুলি প্রেরণ করতে পারেন। JQuery সংজ্ঞায়িত না হওয়ায় আপনার AJAX অনুরোধের জন্য ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করা উচিত।

<script type="text/javascript">
    if (typeof jQuery === 'undefined' || window.jqFallback == true) {
        // XMLHttpRequest for IE7+, Firefox, Chrome, Opera, Safari
        // ActiveXObject for IE6, IE5
        var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        var url = window.jqFallback == true ? "/yourUrl/" : "/yourUrl2/";
        xmlhttp.open("POST", url, true);
        xmlhttp.send();
    }
</script>

1

আপনার নিয়ন্ত্রণের বাইরে কোনও বাহ্যিক ডেটা স্টোর থেকে রিসোর্স লোড করতে অক্ষমতা কঠিন। নিখোঁজ ফাংশনগুলির সন্ধান করা একটি সময়সীমা ভোগ না করার উপায় হিসাবে সম্পূর্ণরূপে মিথ্যাচারী, এখানে বর্ণিত হিসাবে: http://www.tech-101.com/support/topic/4499-issues-using-a-cdn/


0

আরেকটি ফলব্যাক যা ajax.googleapis.com কে cdnjs.cloudflare.com এর সাথে প্রতিস্থাপন করে :

(function (doc, $)
{
    'use strict';

    if (typeof $ === 'undefined')
    {
        var script = doc.querySelector('script[src*="jquery.min.js"]'),
            src = script.src.replace('ajax.googleapis.com', 'cdnjs.cloudflare.com');

        script.parentNode.removeChild(script);
        doc.write('<script src="' + src + '"></script>');
    }
})(document, window.jQuery || window.Zepto);
  • আপনি স্ট্রিংটিতে নির্দিষ্ট করে কোনও jQuery সংস্করণে আটকে থাকতে পারেন
  • সম্পদ পরিচালনার জন্য উপযুক্ত যা এইচটিএমএল স্নিপগুলির সাথে কাজ করে না
  • বুনোতে পরীক্ষিত - চীন থেকে ব্যবহারকারীদের জন্য নিখুঁত কাজ করে

আপনি কি নীচের বিবৃতিটি বিশদভাবে বলতে পারেন: "আপনাকে jQuery সংস্করণটির যত্ন নিতে হবে না"?
জোশ হাবদাস

সংস্করণটি ইউআরএল এর এমন একটি অংশ যা এই পদ্ধতির দ্বারা স্পর্শ করা যায় না ... jquery / 3.xx / jquery.min.js
redaxmedia

1
জিক্যুরি যখন সংস্করণ 4-এ ফিরে আসে এবং পিছনের দিকে অসামঞ্জস্যিত পরিবর্তনগুলি প্রবর্তন করে তখন কি এতে ভাঙ্গনের সম্ভাবনা রয়েছে?
জোশ হাবদাস

-1 কারণ জিকুয়ারি যদি এমন পরিবর্তনগুলির সাথে পরিচয় করিয়ে দেয় যা সংস্করণ নির্দিষ্ট না করা হয় তবে আপনার স্ক্রিপ্টগুলি এখনও সমর্থন করবে না break
লুকাজি

@ লুকজি আমি মনে করি আপনি ফলব্যাক বুঝতে পারবেন না। এটি ডোমেনটি যেখানে হোস্ট করা হয়েছে তা প্রতিস্থাপন করে এবং ফাইলের নাম / সংস্করণটি স্পর্শ করে না।
redaxmedia

0

আপনি কোড ব্যবহার করতে পারেন:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>window.jQuery || document.write('<script type="text/javascript" src="./scripts/jquery.min.js">\x3C/script>')</script>

তবে এছাড়াও এমন গ্রন্থাগার রয়েছে যা আপনি আপনার স্ক্রিপ্টগুলির জন্য কয়েকটি সম্ভাব্য ফ্যালব্যাক সেটআপ করতে এবং লোডিং প্রক্রিয়াটি অনুকূল করতে পারেন:

  • basket.js
  • RequireJS
  • yepnope

উদাহরণ:

বাস্কেট.js আমি আপাতত সেরা বৈকল্পিক বলে মনে করি। লোকাল স্টোরেজে আপনার স্ক্রিপ্টটি ক্যাচ করবে, এটি পরবর্তী লোডিংগুলিকে গতি বাড়িয়ে তুলবে। সহজ কল:

basket.require({ url: '/path/to/jquery.js' });

এটি একটি প্রতিশ্রুতি ফিরিয়ে দেবে এবং আপনি ত্রুটিতে পরবর্তী কল করতে পারেন, বা সাফল্যের উপর নির্ভরতা লোড করতে পারেন:

basket
    .require({ url: '/path/to/jquery.js' })
    .then(function () {
        // Success
    }, function (error) {
        // There was an error fetching the script
        // Try to load jquery from the next cdn
    });

RequireJS

requirejs.config({
    enforceDefine: true,
    paths: {
        jquery: [
            '//ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min',
            //If the CDN location fails, load from this location
            'js/jquery-2.0.0.min'
        ]
    }
});

//Later
require(['jquery'], function ($) {
});

yepnope

yepnope([{
  load: 'http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js',
  complete: function () {
    if (!window.jQuery) {
      yepnope('js/jquery-2.0.0.min.js');
    }
  }
}]);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.