2012-01-05 13 views
6

यह सिर्फ रात में बहुत देर हो चुकी हो सकता है मुझे एक स्पष्ट समाधान यहाँ देखने के लिए के लिए है, लेकिन मैं समझ मैं एक राय के साथ किसी को भी से कुछ विचार प्राप्त होगी ...रोकने डुप्लिकेट अनंत स्क्रॉल ajax लोडर

साइट मैं मैं काम कर रहा हूँ उपयोगकर्ता पदों की एक लंबी सूची है। जब आप नीचे पहुंचते हैं या नीचे जाते हैं तो मुझे 100 पदों के अगले बैच में AJAX पर काम करने वाले सभी स्क्रॉल ईवेंट हैंडलर मिलते हैं।

मेरा प्रश्न है ... मैं निम्नलिखित परिदृश्य को कैसे रोकूं?

  1. userx साइट और लोड पदों 1-100
  2. 10 अधिक उपयोगकर्ताओं को साइट पर जाएँ और 10 से अधिक पदों नीचे और लोड पदों 101-200, जो होने के लिए करने के लिए इस्तेमाल करने के लिए
  3. userx स्क्रॉल जोड़ने का दौरा पोस्ट 91-190
  4. userx ट 91-100 के डुप्लिकेट के साथ समाप्त होता है

मैं मामले में नीचे मेरी कोड का एक नीचे छीन संस्करण शामिल करेंगे यह

के साथ किसी और में मदद करता है
$.ajax({ 
    type:'POST', 
    url:"/userposts.php", 
    data:{ limit: postCount }, 
    success:function(data) { 
     $("postsContainer").append(data); 
     if ($("postsContainer").find("div[id='lastPostReached']")) { 
      // unbind infinite scrolling event handlers 
     } 
    }, 
    dataType:'html' 
}); 
मेरे PHP स्क्रिप्ट में

मैं अनिवार्य रूप से निम्नलिखित:

if (! isset($_POST["limit"])) { 
    $sql .= " LIMIT 101"; // initial request 
} else { 
    $sql .= " LIMIT {$_POST["limit"]},101 
} 

$posts = mysql_query($sql); 
while($post = mysql_fetch_assoc($posts)) { 
    /* output formatted posts */ 
} 

// inform callback handler to disable infinite scrolling 
if (mysql_num_rows($posts) < 101) { 
    echo '<div id="lastPostReached"></div>'; 
} 

यह मैं अनंत स्क्रॉल अच्छा और आसान, देता है, लेकिन मैं कैसे काल्पनिक डुप्लिकेट को रोका जा सकता है कि तब दिखाई देते हैं जब नए रिकॉर्ड किया गया है AJAX अनुरोधों के बीच तालिका में जोड़ा गया?

उत्तर

8

आप उस समय servertime इंगित करता है php से एक टाइमस्टैम्प परिभाषित पृष्ठ लोड (जैसे var _loadTime = <?php echo time(); ?>) और फिर पारित सीमा के साथ अजाक्स डेटा कॉन्फ़िगर ऑब्जेक्ट के हिस्से के रूप में यह मान।

फिर सर्वर पक्ष पर आप इस समय के बाद बनाए गए किसी भी पोस्ट को बाहर कर सकते हैं और अपनी सूची को सुरक्षित रख सकते हैं।

आप एक कदम आगे भी जा सकते हैं और इस समय का उपयोग मूल अजाक्स लंबी मतदान तकनीक के साथ कर सकते हैं ताकि नए पदों के उपयोगकर्ता को सूचित किया जा सके क्योंकि नए पदों के लोड/आखिरी लोडिंग के बाद फेसबुक और ट्विटर्स फीड्स के समान।

+0

शानदार, धन्यवाद! यह सब अब इतना आसान लगता है ... – overeasy

+0

क्या होगा अगर कोई कुछ सामग्री हटा देता है? –

0

बस पदों के लिए एक अद्वितीय पहचानकर्ता आईडी का उपयोग करें और पीछे की ओर गिनें।

प्रथम यात्रा उपयोगकर्ता पदों 603-503 का अनुरोध करता है

दस उपयोगकर्ताओं पृष्ठ पर लाने के लिए और टिप्पणी जोड़ें ताकि उच्चतम टिप्पणी अब 613

उपयोगकर्ता नीचे scolls है और अनुरोध करता 503-403

समस्या हल ? :)

+0

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

+0

मूल फ़िल्टर (एएससी = डीईएससी, डीईएससी = एएससी) से पीछे की ओर क्रमबद्ध करें, फिर डेटासेट के अंत से सामने के हिस्सों में भाग काट लें। जैसे आपकी पहली पोस्ट-चंक सीमा है (postnumbers-postnumbers के लिए 100) और इसके बाद यह हमेशा आपके द्वारा वितरित सूचकांक-100 अंतिम सूचकांक में 100 है। इस तरह तार्किक रूप से सभी नए डेटा को आपके डेटासेट के अंत में जोड़ा जाता है। – bardiir

2

अपने AJAX अनुरोध को अपडेट करें, ताकि limit पैरामीटर के अलावा आप पोस्ट आईडी की वर्तमान सीमा से गुजरते हैं (मुझे लगता है कि पोस्ट में किसी प्रकार का अद्वितीय आईडी है)। पोस्ट के अगले सेट को पुनर्प्राप्त करते समय उन पैरामीटर को ध्यान में रखने के लिए अपने PHP को अपडेट करें।

यही है, "मुझे एक और 100 दें" कहने के बजाय "मुझे आईडी एक्स पर 100 शुरू करना" है।

(क्षमा करें, मैं समय अब ​​इस के लिए एक उदाहरण कोड लिखने की जरूरत नहीं है।)

+0

यह मुझे अधिक मजबूत विधि (जोड़ों और हटाने के लिए प्रतिरोधी) लगता है। मैं क्वेरी के कुछ कार्यान्वयन के बारे में सोचता हूं। @nnnnnn क्या आप एक उदाहरण प्रदान कर सकते हैं? –

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