2010-10-26 15 views
10

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

if(userVisit != 1) { 
    // First time visitor 
    populateData(); 
} 

function populateData() { 
    $.ajax({ 
      url: "server.php", 
      data: "action=prepare&myid=" + id, 
      dataType: "json", 
      success: function(json) { 
       if(json.error) { 
        return; 
       } 
       _id = response[json].id; 
       getInformation(_id); 
      } 
    }); 
} 

function getInformation(id) { 
    $.ajax({ 
      url: "REMOTESERVICE", 
      data: "action=get&id=" + id, 
      dataType: "json", 
      success: function(json) { 
       if(json.error) { 
        return; 
       } 

       $.ajax({ 
         url: "server.php", 
         data: "action=update&myid=" + id + '&data=' + json.data.toString(), 
         dataType: "json", 
         success: function(json) { 
           if(json.error) { 
            return; 
           } 
         } 
       }); 
      } 
    }); 
} 

तो क्या कोड है कि यह एक नया उपयोगकर्ता (populateData समारोह) के लिए पूर्वनिर्धारित पहचानकर्ताओं की सूची हो जाता है और एक तीसरे पक्ष सेवा (getInformation समारोह) से और अधिक जानकारी प्राप्त करने के लिए उन्हें का उपयोग करता है। यह getInformation फ़ंक्शन किसी तृतीय पक्ष सर्वर से पूछताछ करता है और एक बार जब सर्वर कुछ डेटा देता है, तो वह उस डेटा को मेरे सर्वर पर किसी अन्य AJAX कॉल के माध्यम से भेजता है। अब मुझे यह जानने का एक तरीका है कि सभी AJAX कॉल कब पूरा हो गए हैं ताकि मैं पृष्ठ को फिर से लोड कर सकूं। कोई सुझाव?

उत्तर

32

अपने getInformation() में, फोन आप अपने success कॉलबैक में location.reload() कॉल कर सकते हैं इस तरह: किसी भी आगे ajax कॉल पूरा जब तक, आप ajaxStop event उपयोग कर सकते हैं

success: function(json) { 
    if(!json.error) location.reload(true); 
} 

इंतजार करने के लिए, इस तरह:

मोर
success: function(json) { 
    if(json.error) return; 
    //fire off other ajax calls 
    $(document).ajaxStop(function() { location.reload(true); }); 
} 
+0

धन्यवाद। लेकिन क्या होगा यदि 'getInformation' फ़ंक्शन' में 'सफलता' कॉलबैक के अंदर मेरे सर्वर पर कुछ AJAX कॉल अभी भी लंबित हैं? क्या यह इस पर विचार किए बिना पेज को रीफ्रेश नहीं करेगा? या क्या मैं कुछ न कुछ भूल रहा हूं? – Legend

+0

@Legend - हां, यदि आप सब कुछ पूरा होने तक देरी करना चाहते हैं, तो बस '$ (दस्तावेज़) .ajaxStop (function() {location.reload (true);}); 'और यह सभी निष्पादित होगा वे अनुरोध पूरा हो गए। –

+0

यह कुल समझ में आता है लेकिन किसी कारण से, जब मैं यह कॉल डालता हूं, तो पृष्ठ हर समय ताज़ा रहता है। – Legend

-1
//document.location.reload(true); 
window.location = window.location; 
+0

मैं देख सकता हूं कि आप क्या प्राप्त कर रहे हैं लेकिन आपको दोहराने का प्रयास करना चाहिए कि आपका लिंक क्या दिखाता है। मुझे लगता है कि आप दस्तावेज़ कहने का मतलब है। Location.reload (true) POST डेटा वाले पृष्ठों पर अपेक्षित काम नहीं करता है? –

0

तुम बस server.php फ़ाइल में एक ही पृष्ठ जहां समारोह एक हैडर ('स्थान: एचटीएमएल-पेज') का उपयोग कर परिभाषित किया गया है पर पुन: निर्देशित कर सकता है;

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