2010-03-03 19 views
8

तो मैं शीर्ष पर संदेश के साथ एक स्टैक ओवरफ्लो देखना चाहता हूं।डिस्प्ले डिव केवल एक बार

अब मेरे पास सभी कॉन्फ़िगर किए गए हैं और ऐसे में, लेकिन मुझे एक समस्या मिली .. संदेश केवल पहली बार प्रदर्शित होता है, दूसरी बार यह प्रकट नहीं होता है।

मुझे पता है क्यों, हर आईडी के बारे में कुछ अद्वितीय या कुछ div में होना चाहिए .. और फिर मैंने rand(1, 300); (php) का उपयोग किया है और यह अभी भी काम नहीं करेगा। (सिर्फ मामले में आप देखना चाहते हैं -

<div class="message2" id="message2" onclick="closeNotice2()" style="display: none"> 
Yo, <b><? echo $pusername; ?></b> - <? echo $_SESSION["user_message"]; ?> 
<a class="close-notify" onclick="closeNotice2()">X</a> 
</div> 

CloseNotice2():

function checkSession(){ 
    $.ajax({url: "session.php", success: function(data){ 
     if(data == 1){ 
      var postFilen = 'msg.php'; 
      $.post(postFilen, function(data){ 
      $(".msg").html(data).find(".message2").fadeIn("slow") 
      setTimeout(function(checkSession) { 
    $('.msg').fadeOut('slow'); 
}, 10000); 
      }); 
     }else{ 
      $('.message2').hide(); 
     } 
    }}); 
// setInterval('checkSession()',1000); 
} 

index.php:

<div class="msg" id="msg" ></div> 

msg.php

यहाँ मेरी कोड है वह भी):

function closeNotice2() { 
    $(".message2").fadeOut("slow"); 
} 

session.php:

if(isset($_SESSION['user_message'])) { 
echo 1; 
} 

सीएसएस:

.message2 { 
    position: absolute; 
    top: 0; 
    left: 0; 
    z-index: 105; /* Anything higher than 1 will do */ 
    background-color: #034678; 
    font-family: Arial,Helvetica,sans-serif; 
    font-size: 100%; 
    text-align: center; 
    font-weight: bold; 
    border-bottom: 2px solid #FFF; 
    height: 26 px; 
    width: 100%; 
} 
.message2 span { 
    text-align: center; 
    width: 95%; 
    float:left; 
} 

मुझे लगता है कि इतना ही है। आशा है कि आप मेरी मदद कर सकते हैं।

उत्तर

0

अंततः मुझे त्रुटि मिली, और यह चेकआउट() के अंदर टाइमआउट() फ़ंक्शन था; .. अब यह एक आकर्षण की तरह काम करता :)

मैं सिर्फ यह दूर करने के लिए की जरूरत:

setTimeout(function() { 
    $('.msg').fadeOut('slow'); 
     }, 5000); 

मुझे पता है कि यह कैसे तय करने के लिए नहीं है, लेकिन मैं एक और सवाल में पूछना क्योंकि मैं यह अब जवाब मिल जाएगा! लेकिन धन्यवाद हेन्चमैन और एलन, मुझे जवाब देने के लिए अपना समय लेने के लिए

1

आप session.php से पूछताछ कर रहे हैं, और यदि सत्र चर सेट नहीं किया गया था, तो संदेश दिखाई देगा। यदि सत्र चर सेट किया गया है, तो संदेश प्रकट नहीं होगा।

संभवतः आपके सत्र चर 'user_message' को पहले पृष्ठ कॉल के बाद कहीं भी सेट किया जाएगा, ताकि संदेश दोबारा नहीं दिखाया जाएगा। मुझे ऐसा कोड नहीं मिला।

आपकी जावास्क्रिप्ट क्लासनाम द्वारा संदेश div-container को ढूंढ रहा है "msg"/"message2" - यादृच्छिक संख्याओं के साथ उस div की आईडी को बदलते समय यह व्यवहार परिवर्तित नहीं होता है। इन यादृच्छिक संख्याओं का उपयोग करके आप क्या हासिल करना चाहते हैं? क्या आप संदेश-कंटेनर को केवल एक बार से अधिक दिखाना चाहते हैं?

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

पहले, निम्न कोड का उपयोग करने का प्रयास करें। अब संदेश हर बार दिखा रहा है?

function checkSession(){ 
    var postFilen = 'msg.php'; 
    $.post(postFilen, function(data){ 
      $(".msg").html(data).find(".message2").fadeIn("slow") 
      setTimeout(function(checkSession) { 
      $('.msg').fadeOut('slow'); 
      }, 10000); 
    }); 
} 
+0

हाय। आफ्टर Ive वैरिएबल सेट करता है, मैं फक्शन चेकसेशन() को कॉल करता हूं, इस तरह यह संदेश प्रदर्शित करता है .. मुझे नहीं पता कि मेरे जावास्क्रिप्ट के साथ आपका क्या मतलब है, संदेश div कंटेनर ढूंढ रहा है .. क्या यह वर्ग नहीं ढूंढता .. और मेरा बिंदु कर रहा है यादृच्छिक संख्या मेरी खुद की विधि का प्रयास करने के लिए "बस" थी, इसलिए यह संदेश फिर से दिखाई देगा .. – Karem

+0

तो संदेश फिर से दिखाई देगा, जब इसे अगली बार सेट किया जाएगा * – Karem

+0

जो मैं कहना चाहता हूं वह यह है कि यादृच्छिक आईडी बदल नहीं पाएंगे आपके जावास्क्रिप्ट का व्यवहार, क्योंकि जावास्क्रिप्ट संदेश के कंटेनर को इसके वर्ग के नाम से संभाल रहा है। –

0

समस्या आपके द्वारा पोस्ट किए गए कोड में एक बग प्रतीत नहीं होती है। मुझे लगता है कि परिवर्तनीय $_SESSION['user_message'] किसी बिंदु पर बदल गया है (यानी हटा दिया गया है या शून्य, गलत या शून्य पर सेट है)। आप के बाद कुछ बिंदु पर अपना मान निर्धारित कर रहे हैं, अन्यथा इसका परिणाम isset() पहले स्थान पर सही नहीं होगा।

अपने ब्राउज़र और आपके सर्वर के बीच वास्तविक संचार की जांच करके FireBug का उपयोग करके या जेएस कॉलबैक की शुरुआत में बस alert(data) जोड़कर इस समस्या को डीबग करना शायद अधिक आसान है।

यदि संदेश नहीं दिखाया जाता है तो आपको कोई अलर्ट नहीं मिलता है, तो समस्या आपके जेएस के साथ होती है (यानी AJAX कॉल आग नहीं करता है, वापस नहीं आता है या इसके आसपास का कोड कभी नहीं पहुंचता है)।अगर आपको 1 के अलावा किसी अन्य चीज़ के साथ अलर्ट मिलता है, तो समस्या सर्वर प्रतिक्रिया में होती है (यदि आपके पास display_errors सक्षम है, तो शायद यह वास्तव में टूटा हुआ होने पर कुछ त्रुटि संदेश होगा)।

मुझे आशा है कि आपको पता है कि आपके .msg div आपके AJAX हैंडलर में कॉलबैक के कारण स्वचालित रूप से लुप्त हो रहा है, चाहे .message2 अभी तक फीका हुआ है या नहीं। .message2 को अनदेखा करने तक इसे वापस नहीं लाया जाएगा जब तक कि .msg छिपा हुआ है (हालांकि यह समझाएगा कि div किसी लिंक पर क्लिक करके लोड किए गए किसी अन्य पृष्ठ पर क्यों नहीं दिखाई देता है, एक यूआरएल दर्ज करना या पुनः लोड करना)। यह एक समस्या हो सकती है यदि आप AJAX के माध्यम से सभी सामग्री लोड कर रहे हैं और आपके पास "असली" URL नहीं हैं, हालांकि।

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