2012-07-02 16 views
5

मैं है निम्नलिखित php कोड है जो मैं एक देरी भी जोड़ना चाहते हैं:हैडर स्थान देरी

<?php 
    echo "Message has been sent."; 
    header("Location: page2.php", true, 303); 
    exit; 
?> 

ऊपर कोड बहुत तेजी से होता है तो मैं संदेश नहीं देख सकते हैं:

मैं कोशिश की है :

<?php 
    sleep(5); 
    echo "Message has been sent."; 
    header("Location: page2.php", true, 303); 
    exit; 
?> 

यह या तो संदेश प्रदर्शित नहीं करता है, लेकिन यह 5 सेकंड, जो सिर्फ समय की बर्बादी है के लिए नींद से करता है।

रीडायरेक्ट करने से पहले 5 सेकंड के लिए संदेश प्रदर्शित करने के लिए मैं इसे कैसे प्राप्त करूं?

+1

उपयोग कर रहा है मैं आप पहली बार गूंज डाल मान (के एक फ्लश Maye बफर) और फिर नींद की बजाय, नींद और फिर गूंज ?! – Nanne

+2

ऐसा इसलिए है क्योंकि सर्वर पर नींद आ रही है, और आप क्लाइंट पर देरी करना चाहते हैं, है ना?देरी होने के लिए आपको जावास्क्रिप्ट का उपयोग करने की आवश्यकता होगी। –

उत्तर

24

आप इसे HTTP स्थान रीडायरेक्ट के साथ नहीं कर सकते हैं, क्योंकि ब्राउज़र को हेडर प्राप्त होने पर ही यह रीडायरेक्ट होगा। इसके बजाय, एक ताज़ा का उपयोग शीर्षक में अनुप्रेषित:

header("Refresh:5; url=http://www.example.com/page2.php", true, 303); 

यह चाहिए आधुनिक ब्राउज़रों पर काम करते हैं, लेकिन यह मानकीकृत नहीं है, तो बराबर कार्यक्षमता प्राप्त करने के लिए एक मेटा रिफ़्रेश रीडायरेक्ट का उपयोग करें (आप जिसका अर्थ है 'है होगा

<meta http-equiv="refresh" content="5;url=http://www.example.com/page2.php"> 

से the Wikipedia page:

पुनर्निर्देशन में प्रयुक्त, या बनाने की प्रक्रिया जब एक नया संसाधन बना रहा है उत्पादन के लिए भी एक पूर्ण HTML) है d टेड। यह एक्स सेकंड के बाद रीडायरेक्ट रीफ्रेश करें। यह नेटस्केप द्वारा पेश किया गया एक मालिकाना, गैर मानक हेडर एक्सटेंशन है और अधिकांश वेब ब्राउज़र द्वारा समर्थित है।

+0

क्या यह 303 रीडायरेक्ट करेगा? – oshirowanen

+1

मुझे HTTP विनिर्देशन में 'ताज़ा करें' शीर्षलेख नहीं मिल रहा है। क्या यह मानकीकृत है? –

+0

यह मानकीकृत नहीं है, हालांकि मैं ऐसे ब्राउज़र को खोजने का प्रयास कर रहा हूं जो इसका समर्थन नहीं करता (मुझे यकीन है कि एक है)। किसी भी मामले में, इसका विकल्प ' 'रीफ्रेश है, जो समान कार्यक्षमता उत्पन्न करता है – nickb

2

यदि आप हेडर (स्थान) रीडायरेक्ट का उपयोग कर रहे हैं तो आप संदेश नहीं देख पाएंगे। वास्तव में, हेडर को भेजे जाने से पहले आउटपुट शुरू होने के बाद से उस रीडायरेक्ट को बिल्कुल काम नहीं करना चाहिए। इसके बजाए, आपको देरी के साथ एक मेटा टैग रीफ्रेश करना चाहिए, जैसे echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';

जिसमें पांच सेकंड की देरी होगी। वैकल्पिक रूप से, (और अधिक ठीक से) आप एक जेएस रीडायरेक्ट आउटपुट कर सकते हैं, क्योंकि मेटा रीफ्रेश टैग को बहिष्कृत किया गया है।

3

क्लाइंट-साइड स्क्रिप्टिंग का उपयोग कर पुन: निर्देशन कार्य करें:

<script> 
window.setTimeout(function() { 
    window.location = 'page2.php'; 
    }, 5000); 
</script> 
<p>Message has been sent.</p> 
3

आप इस तरह अपने कोड को संशोधित करने के लिए है:

<?php 

    echo "Message has been sent."; 
    sleep(5); 
    header("Location: page2.php", true, 303); 
    exit; 
?> 
0

मुझे पता नहीं है अगर यह मदद करता है, लेकिन जैसा कि मैं था एक ही मुद्दे से निपटने के लिए जो संदेश जमा करने के बाद साफ होने की आवश्यकता है, मुझे यह जवाब मिला जो बताता है कि आप मूल्य इनपुट को खाली होने के लिए बदल सकते हैं।

यह जवाब है: How do I reset the value of a text input when the page reloads?

और यह कैसे मैं अपने मुद्दे को ठीक, मेरी कक्षा .form नियंत्रण

$(document).ready(function() { 
    $(".form-control").val(''); 
});