2012-11-13 12 views
11

मैं इतिहास एपीआई के साथ काम कर रहा हूं जबकि मैं जावास्क्रिप्ट/jquery के माध्यम से पृष्ठों को असंकालिक रूप से लोड कर रहा हूं। मैं सोच रहा हूं कि ब्राउजर को यह बताना संभव है कि साइट लोड हो रही है, ताकि ब्राउज़र लोडिंग पिक्चर दिखा सके (जैसे फ़ायरफ़ॉक्स में कताई चक्र)।इतिहास एपीआई: ब्राउज़र को कैसे बताना है कि पृष्ठ लोड हो रहा है?

संपादित करें:

अधिक विशिष्ट होना करने के लिए:

तो मैं अपनी वेबसाइट, यूआरएल परिवर्तन, पर एक पृष्ठ लोड नई सामग्री दिखाया गया है, लेकिन फ़ायरफ़ॉक्स एक संकेत के रूप में चरखा नहीं दिखा , कि पृष्ठ लोड हो रहा है।

अगर मैं फेसबुक में टाइमलाइन से एक तस्वीर खोलता हूं, तो छवि लोड हो रही है, यूआरएल परिवर्तन और फ़ायरफ़ॉक्स कताई चक्र दिखाता है कि छवि पृष्ठभूमि में लोड हो रही है।

मुझे वह कताई चक्र भी चाहिए!

उत्तर

1

ठीक है, async अनुरोध जानता है कि कुछ लोड किया जा रहा है। आपको बस कहीं और घटना का प्रचार करना होगा। उदाहरण के लिए, beforeSend हुक का उपयोग कर:

$.ajax('/your_stuff', 
     beforeSend: function() { 
     $(document).trigger('loading'); 
     } 
     ....) 

और उसके बाद:

$(document).on('loading', function() { alert("request is loading");} 

मैं एक ही समय आप इतिहास API के साथ अपने URL को अपडेट पर ईवेंट ट्रिगर करने के लिए सलाह होगा।

+1

यह स्क्रिप्ट एक अलर्ट-बॉक्स दिखाती है। लेकिन मैं चाहता हूं कि ब्राउजर स्वयं दिखाता है कि पेज लोड हो रहा है। – Olli

+0

आपने हमारे प्रश्न को थोड़ा गलत बना दिया है, फिर। अगर आप इसे सही ढंग से समझते हैं, तो आप जानना चाहते हैं कि AJAX अनुरोध करते समय "लोडिंग" स्थिति को अनुकरण करने के लिए आप फेविकॉन को कैसे अपडेट कर सकते हैं। – ChuckE

+0

https://gist.github.com/428626 यह आपकी मदद कर सकता है। अब आपको यह जानने की जरूरत है कि "लोडिंग" आइकन कहां संग्रहीत किया जाता है, जो ब्राउज़र से ब्राउज़र से भिन्न हो सकता है।इसलिए, आप या तो अपने मामले में हर जगह काम करने के लिए मिलता है, या आपको ब्राउजर द्वारा स्थान मिलेगा और अपडेट से पहले ब्राउज़र को "स्नीफ" कर देगा। – ChuckE

-1

मुझे लगता है कि आप अपने AJAX के लिए jQuery का उपयोग कर रहे टैग से मानते हैं। आप $.ajaxStart() और $.ajaxComplete() इन की तरह वैश्विक AJAX के संचालकों का उपयोग कर सकते की परवाह किए बिना सक्रिय कर देगा जहां आप अपने कोड के भीतर एक ajax विधि कॉल

$('#myLoadingDiv').ajaxStart(toggleLoading).ajaxComplete(toggleLoading); 

function toggleLoading(){ 
    $(this).toggle(); 
} 

API संदर्भ http://api.jquery.com/ajaxStart/

मैं आपके सवाल का शब्दों से लगता है कि आप करने के लिए सक्षम होना चाहते हैं लोडिंग छवि को वास्तविक ब्राउज़र टैब पर ही नियंत्रित करें। आप इसे नियंत्रित नहीं कर सकते। अपनी स्वयं की छवि या पृष्ठ के भीतर पाठ का उपयोग करना भी उपयोगकर्ता के लिए अधिक दिखाई

संपादित आप इस कोड के लिए id=myLoadingDiv साथ एक तत्व में अपने खुद के लोड हो रहा है एनीमेशन प्रदान करनी चाहिए

+0

यह स्क्रिप्ट एक अलर्ट-बॉक्स दिखाती है। लेकिन मैं चाहता हूं कि ब्राउजर स्वयं दिखाता है कि पेज लोड हो रहा है। – Olli

+0

कृपया बताएं कि 'ब्राउज़र स्वयं ही दिखाता है कि पृष्ठ लोड हो रहा है' से आपका क्या मतलब है। यह भी एक अलर्ट बॉक्स नहीं है ... किसी भी एचटीएमएल को आप जिस पेज पर चाहते हैं उस पर कहीं भी रखा जा सकता है और आप इसे किसी भी तरह से एनिमेट कर सकते हैं जिसे आप – charlietfl

+0

चाहते हैं, क्षमा करें, यह टिप्पणी अन्य उत्तरों को संदर्भित करती है - न कि आपके लिए। मैंने आपकी स्क्रिप्ट का परीक्षण किया, लेकिन फ़ायरफ़ॉक्स में "कताई चक्र" दिखाई नहीं देता है। मैंने आगे के स्पष्टीकरण के साथ अपना प्रश्न संपादित किया। – Olli

7

मैं इन सवाल में जवाब मिल गया काम करने के लिए है:

How to have AJAX trigger the browser's loading

var i = $('<iframe>'); 
console.log(i); 
i.appendTo('body'); 
function start() { 
    i[0].contentDocument.open(); 
    setTimeout(function() { 
     stop(); 
    }, 1000); 
} 
function stop() { 
    i[0].contentDocument.close(); 
    setTimeout(function() { 
     start(); 
    }, 1000); 
} 

start(); 

स्रोत: jsFiddle

स्क्रिप्ट एक आईफ्रेम बनाता है, जो AJAX.start & ajax.stop-event द्वारा ट्रिगर किया जाता है।

+1

क्रोम में काम नहीं करता है :-( – Frodik

संबंधित मुद्दे