2011-11-16 13 views
11

मेरे पास रेल ऐप है और मैं pjax अनुरोधों के साथ एक अजीब व्यवहार प्राप्त करता रहता हूं। जब मैं अपने विकास लॉग में देखता हूं तो मैं देख सकता हूं कि दो अनुरोध किए जा रहे हैं। पहला अनुरोध pjax है और अगला वाला नहीं है। नतीजतन पेज अभी भी पुनः लोड हो जाता है।jquery pjax अनुरोध दो बार भेजना

मुझे सराहना है कि कोई भी इससे मेरी सहायता कर सकता है।

+2

हमें आपके प्रश्न की एक स्पैर स्पष्टीकरण से अधिक देखने की आवश्यकता है। कृपया कुछ प्रासंगिक कोड, लॉग फाइल या अन्य सामान पोस्ट करें। – Bojangles

+0

मैं एक ही मुद्दे में चल रहा हूं। मेरे पास एक उदाहरण उपलब्ध है [क्लाउडफाउंड्री पर] [http://scaffolding.cloudfoundry.com/book/list)। पेजिनेशन और टेबल सॉर्टिंग लिंक पीजेएक्स होना चाहिए लेकिन फायरबग का उपयोग करके आप उन्हें एक एक्सएचआर अनुरोध कर सकते हैं जिसके बाद पूरे पेज को ताज़ा किया जा सकता है। वहां चल रहे ऐप के लिए स्रोत कोड [यहां गिटहब पर है] (https://github.com/robfletcher/grails-enhanced-scaffolding/tree/pjax) प्रासंगिक फ़ाइल शायद 'grails.list.js' –

+1

फ़ायरबग के साथ मैंने पाया है कि मेरे मामले में पीजेएक्स की डिफ़ॉल्ट सफलता हैंडलर मैंने इसे दिए गए खंड चयनकर्ता का उपयोग करके किसी भी सामग्री को खोजने में असफल रहा है। [Pjax कोड] को देख रहे हैं (https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js#L106) उस स्थिति में यह एक पूर्ण पृष्ठ रीफ्रेश करेगा। मैं स्पष्ट नहीं हूं कि चयनकर्ता क्यों काम नहीं कर रहा है क्योंकि AJAX प्रतिक्रिया ठीक लगती है और चयनकर्ता मान्य है। –

उत्तर

14

JQuery pjax प्लगइन में एक डिफ़ॉल्ट त्रुटि हैंडलर है, जो केवल लक्ष्य पृष्ठ को फिर से लोड करेगा। टाइमआउट पास होने पर यह त्रुटि हैंडलर कॉल हो जाता है, जो pjax बहुत कम सेट करता है। नतीजतन, यदि आपका अनुरोध बहुत लंबा लगता है, तो आप दो समान अनुरोध देखेंगे। पीजेक्स अनुरोध (शायद _pjax विशेषता सेट के साथ), उसके बाद एक और गैर-पीजेक्स अनुरोध। ब्राउज़र में आपको एक संपूर्ण पृष्ठ रीलोड दिखाई देगा।

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

समस्या को हल करने के लिए, मैं की तरह लग रहे करने के लिए अपने PJax कोड बदल ...

$.pjax({ 
     url: xhr.getResponseHeader('Location'), 
     container: '#container', 
     timeout: 4000 // pick a suitable timeout 
     }); 
बेशक

, इस सीधे pjax बुला रहा है। यदि आप इसे सीधे कॉल नहीं कर रहे हैं, तो आपको एक समान समाधान मिलना होगा।

+0

मेरी जान बचाई! :) यह दो अनुरोध नहीं भेज रहा था, लेकिन बस पहले को रद्द करना और फिर पुनः लोड करना .. वैसे भी - पूरी तरह से काम करता है! –

1

मैं इस मुद्दे पर भी भाग गया हूं - ऐसा लगता है कि यह ब्राउज़र कैशिंग से संबंधित एक मुद्दा है। मैंने देखा है कि अगर मैं इतिहास साफ़ करता हूं और कैश करता हूं तो यह क्रोम में हो रहा है। मैं अभी तक इसे हल करने में सक्षम नहीं हूं लेकिन मुझे लगता है कि ब्राउज़र कैशिंग को अक्षम करने के साथ इसका कुछ संबंध है?

+1

मेरी समस्या यह पता चला कि अनुरोध समय समाप्त हो गया था। टाइमआउट पास करना: पजाक्स फ़ंक्शन में 2000 ने इसे मेरे लिए तय किया। मुझे अपने लेआउट के हिस्से में एक खाली पजाक्स कंटेनर भी मिला। जब मैं उस टुकड़े पर नेविगेट किया तो यह मुझे ब्राउज़र कंसोल में एक त्रुटि दे रहा था। मैं इसमें एक खाली अवधि तत्व डालकर इसे ठीक करने में सक्षम था। – andrewajo

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