2012-03-22 12 views
9

मैं jQuery मोबाइल 1.0.1 के साथ jQuery 1.6.4 का उपयोग कर रहा हूं। जब भी आप किसी ऐसे पृष्ठ से लिंक करते हैं जो एक 301 रीडायरेक्ट करने का प्रयास करता है तो मैं किसी समस्या में भाग रहा हूं। http://www.widgetsandburritos.com/jquery-mobile-test/jQuery मोबाइल 301 रीडायरेक्ट मुद्दे

इस पृष्ठ पर केवल एक चीज jQuery मोबाइल है शामिल हैं और एक अन्य पृष्ठ पर एक लिंक एक 301 है कि कहीं और अनुप्रेषित:

मैं सेट अप के समय एक नमूना पृष्ठ है।

<?php 
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: 301success.html"); 
?> 

यह बस 301success.html करने के लिए ब्राउज़र पारित करना चाहिए:

<!DOCTYPE html> 
<html> 
    <head> 
     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" /> 
     <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> 
     <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script> 
    </head> 
    <body> 
     <a href="301test.php">301 test</a>  
    </body> 
</html> 

301test.php निम्नलिखित सामग्री है। यह काम करता है अगर आप सीधे उस URL को

http://www.widgetsandburritos.com/jquery-mobile-test/301test.php

करने के लिए जाना लेकिन जब आप jQuery मोबाइल का उपयोग कर पृष्ठ से लिंक पर क्लिक करें, यह "अपरिभाषित" के बजाय पता चलता है। क्या jQuery मोबाइल वर्तमान में रीडायरेक्ट को संभालने में असमर्थ है?

कोई भी संभावित काम आसपास है?

आपकी मदद के लिए धन्यवाद।

संपादित करें [3/23/12 12:41 पूर्वाह्न सीएसटी]

I also posted this problem on the jQuery Mobile forums। किसी ने वहाँ एंकर टैग में rel = "बाहरी" जोड़ने की सिफारिश की। यह तकनीकी रूप से काम करता है यदि आप जो भी कर रहे हैं वह एक लिंक बना रहा है, लेकिन अगर आप किसी अन्य तंत्र के माध्यम से रीडायरेक्ट पर जाते हैं, तो POST अनुरोध जैसे समस्या को ठीक नहीं करेंगे।

http://www.widgetsandburritos.com/jquery-mobile-test/test2.html

<!DOCTYPE html> 
<html> 
     <head> 
       <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" /> 
       <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> 
       <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script> 
     </head> 
     <body> 

       <form method="post" action="301test.php"> 
         <input type="submit" value="test" /> 
       </form> 

     </body> 
</html> 
बजाय पर पहुंचने से एक लिंक से अनुप्रेषित पेज 301test.php की

में समझाने के लिए, मैं सेटअप एक उच्च माध्यमिक परीक्षा है, यह अब एक रूप हम करने के लिए भेज रहे हैं के स्थान है। संदर्भ का उपयोग किया जाएगा, ऐसा होगा कि यदि आप त्रुटियों के साथ एक फॉर्म सबमिट करते हैं, तो यह उसी पृष्ठ पर रहेगा जो आपको त्रुटियों को सही करने की अनुमति देता है। अगर कोई त्रुटि नहीं थी, तो यह आपको एक सफल पृष्ठ पर रीडायरेक्ट करता है। यह उपयोगकर्ता फिर से फ़ॉर्म सबमिट करने से बचने के लिए किया जाता है यदि कोई उपयोगकर्ता अपने ब्राउज़र को रीफ्रेश करता है। यह सामान्य वेब अनुप्रयोगों में शानदार ढंग से काम करता है। लेकिन jQuery मोबाइल के साथ कॉम्बो में यह काम नहीं लग रहा है।

बस सोचा कि मैं इस मुद्दे के बाद किसी और को कुछ अतिरिक्त संदर्भ दूंगा।

उत्तर

20

मेरी अपनी समस्या का जवाब पता चला। उपरोक्त में, मैंने उल्लेख किया है कि यह < फॉर्म > टैग का उपयोग कर समस्याएं पैदा कर रहा था। JQuery मोबाइल प्रलेखन के माध्यम से ब्राउज़ करने के बाद मुझे यह पृष्ठ मिला: http://jquerymobile.com/test/docs/forms/forms-sample.html

यह चाल है कि यदि आप एक फॉर्म कर रहे हैं, तो इसे AJAX का उपयोग न करने के लिए मजबूर करने के लिए। आप

डेटा-AJAX = FORM टैग को "झूठा" जोड़ कर ऐसा करते हैं।

तो यह

<form method="post" action="301test.php"> 

बदलता है

<form method="post" action="301test.php" data-ajax="false"> 

करने और बस दोहराना के लिए क्या ऊपर कहा गया था। अगर आपको एंकर लिंक के साथ कुछ करने की ज़रूरत है, तो बस इसे rel = "external" जोड़ें।

तो यह बदल जाता

<a href="301test.php">301 test</a> 

<a href="301test.php" rel="external">301 test</a> 
+1

बस अपने आप को और अपने प्रपत्र टैग बदल शामिल करने के लिए इस से थोड़ा मिला डेटा-ajax = 'असत्य' करता है छल। – Aaron

+2

बिल्कुल सही, बस मुझे क्या चाहिए! – user1105056

3

को मुद्दा गहरा है। here या here पर एक नज़र डालें।

ऐसा लगता है कि XMLHttpRequest ऑब्जेक्ट (AJAX अनुरोध करने के लिए प्रयोग किया जाता है) अपने आप ही रीडायरेक्ट संभालती है और अंतिम प्रतिक्रिया देता है। जिसका अर्थ है कि jQuery मोबाइल नहीं जानता कि उसे यूआरएल अपडेट करना चाहिए।

समाधान अंतिम पृष्ठ पर data-url विशेषता का उपयोग करने के लिए है। यह ब्राउज़र में यूआरएल अपडेट करने के लिए jQuery मोबाइल को मजबूर करता है। एक कामकाज की तरह लेकिन एक हैक होने से बहुत दूर है।

जिस तरह से jQuery मोबाइल, AJAX और रीडायरेक्ट के साथ और अधिक समस्याएं हैं - उदाहरण के लिए यदि आप AJAX- रीडायरेक्ट के बाद ब्राउज़र के बैक बटन पर क्लिक करते हैं, तो jQuery मोबाइल (1.1 तक) यूआरएल के तहत एक अंतिम पृष्ठ उत्पन्न कर सकता है पुनर्निर्देशन पृष्ठ। इसलिए डेटा-AJAX = "false" का उपयोग करना एक बुद्धिमान विकल्प है।

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

लेकिन फिर भी डेटा-ajax = "false" एक बुलेट प्रूफ समाधान नहीं है। इसका उपयोग करके आपके मोबाइल ऐप को कई ब्राउज़र पृष्ठों में विभाजित किया जाता है, जो पार्टी के सभी प्रकार के ब्राउज़र अंतर को लाता है। उदाहरण के लिए फ़ायरफ़ॉक्स को bf cache कहा जाता है जबकि Chrome doesn't। यह एक अपवित्र गड़बड़ है और मुझे लगता है कि सेन्चा टच की तरह कुछ ऐसा है जो मोबाइल ऐप्स होने का नाटक करने वाले पृष्ठों के विकास के लिए बेहतर है।

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

वैकल्पिक रूप से, एक नियमित रूप प्रस्तुतियाँ से बच सकते हैं और उस के लिए खुद AJAX कोड का उपयोग और उसके बाद परिणाम पर आधारित पृष्ठों स्विच, लेकिन मैं यह सोच कर कि यह 2012 है का विरोध नहीं कर सकते हैं और ऐसी बातें स्वचालित चाहिए और काम पसीने के बिना निर्दोष रूप से।

0

मैं वर्तमान में एक एप्लिकेशन बना रहा हूं लेकिन भले ही मैं लॉग इन हूं, मैं लॉगिन पेज पर रहता हूं, और मुझे रीडायरेक्ट नहीं किया जाता है। मैं डेटा-ajax = "false"

इस फार्म के कोड है इस्तेमाल किया:

<section id="login"> 
      <h2>Want to take a ride? <span>Login</span></h2> 
      <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" data-ajax="false"> 
        <?php if(!empty($feedback_error)): ?> 
<div id="feedback_error"> 
<p><h1><?php echo $feedback_error ?></h1></p> 
</div> 
<?php endif; ?> 
       <input id="username" type="text" name="username" placeholder="username" /> 
       <input id="password" type="password" name="password" placeholder="password" /> 

       <p>Not yet signed up? <a href="register.php" >Register</a></p> 

       <input type="submit" name="btnLogin" data-theme="b" value="Sign in"> 
      </form> 
     </section> 
+0

क्या यह एक सवाल है? यदि यह है तो आपको एक नया प्रश्न शुरू करने की आवश्यकता है (और शायद अधिक जानकारी पोस्ट करना चाहेंगे)। –

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