2013-02-23 63 views
5

PJAX के दस्तावेज बताते हैं कि गीथब submitting a Gist form में $.pjax.submit() का उपयोग करता है। एक एजेक्स फॉर्म सबमिशन की वांछित विशेषता जो कि गितब अच्छी तरह लागू करती है वह यह है कि यूआरएल फॉर्म के action से नए बनाए गए यूआरएल में रीडायरेक्ट करता है (इस मामले में, जिसमें एक नया सर्वर-साइड निर्मित गिस्ट आईडी है)।pjax सबमिट करें यूआरएल रीडायरेक्शन

उदाहरण के लिए, इस से:

https://gist.github.com/gists // form action 
इस के लिए

:

https://gist.github.com/tim-peterson/5019589 //assume this ID is generated server side 

मैं इस इसी तरह अपनी साइट पर काम करने के लिए मिल गया है (यानी, पेज ही https://gist.github.com/tim-peterson/5019589 के बराबर पर रीडायरेक्ट) लेकिन मैं यूआरएल को रीडायरेक्ट नहीं कर सकता (यह https://gist.github.com/gists जैसा रहता है)।

क्या यह पूरी तरह से सर्वर-साइड इश्यू (सेटिंग हेडर?) है या क्या पीजीएक्स में कुछ ऐसा है जो मुझे याद आ रही है? मैं आज डाउनलोड किए गए पीजेएक्स के एक संस्करण का उपयोग कर रहा हूं, इसलिए यह नहीं हो सकता कि मैं pjax का एक buggier संस्करण का उपयोग कर रहा हूँ।

उत्तर

1

$ .pjax.submit() के साथ ऐसा करने के लिए एक और अधिक सुरुचिपूर्ण/उचित तरीका हो सकता है, लेकिन यह समाधान मैं बिना किसी समस्या के उपयोग कर रहा हूं। मैं सबमिशन से पहले फॉर्म इनपुट को क्रमबद्ध करता हूं, फिर उन्हें अपने सर्वर पर पोस्ट करें। फिर यह सुनिश्चित करने के लिए सर्वर से उत्तर की जांच करें कि मुझे अपने पीजेएक्स को जारी रखने से पहले उपयोगकर्ता को आगे बढ़ने से रोकने की आवश्यकता नहीं है।

$("#save").click(function(e) { 

    e.preventDefault(); 
    dataString = $("#form").serialize(); 

    $.ajax({ 
    type: "POST", 
    url: $("#form").attr("action"), 
    data: dataString, 
    dataType: "json", 
    success: function(data) 
    { 
     // Handle the server response (display errors if necessary) 

     $.pjax({ 
     timeout: 2000, 
     url: data.url, 
     container: '#main-content' 
     }); 

    } 
    }); 
}); 
+0

धन्यवाद शामिल नहीं है उपाय। सवाल यह है कि क्या यह 2 AJAX अनुरोधों या केवल 1 के साथ पूरा किया जा सकता है। यह स्पष्ट रूप से केवल एक अनुरोध होना बेहतर होगा, जहां 'data.url' को ब्राउज़र बार पर धक्का दिया गया था, जैसे सामग्री को ' # मुख्य-content'। अब जब मैं इसे देख रहा हूं, तो गिथब गिस्ट 2 अनुरोध करने में हमारे जैसा ही काम कर रहा है, हालांकि वे पीजेएक्स (पोस्ट) -> पीजेएक्स (जीईटी) कर रहे हैं और हम AJAX (POST) कर रहे हैं -> पीजेएक्स (प्राप्त)। निचली पंक्ति यह है कि यह केवल 1 अनुरोध करने के लिए अधिक प्रतीत होता है (अगली टिप्पणी में जारी ...)। –

+0

मुझे यकीन नहीं है कि 1 अनुरोध में ऐसा करने के लिए पीजेएक्स के साथ संभव है या क्या इसे सर्वर-साइड हैक की आवश्यकता है जिसे मैं नहीं जानता (मैं PHP/codeigniter का उपयोग कर रहा हूं और AJAX के साथ 301/302 रीडायरेक्ट कर रहा हूं अनुरोध यूआरएल नहीं बदलता है, शायद यह किसी भी भाषा/ढांचे में संभव नहीं है?)। –

5

क्या आपको इसका कोई समाधान मिला? मुझे एक ही समस्या थी।

मूल रूप से आपको प्रतिक्रिया शीर्षलेख में एक्स-पीजेएक्स-यूआरएल संपत्ति सेट करने की आवश्यकता है। यह मान अनुरोध URL के समान होना चाहिए।

Laravel में, मैं इसे इस तरह किया ...

App::after(function($request, $response) 
{ 
    $response->headers->set('X-PJAX-URL', $request->getRequestUri()); 
}); 
0

ऐसा होता है, तो प्रतिक्रिया एचटीएमएल हाँ कि वास्तव में क्या मैं एक हैक के रूप में भी कर रहा हूँ है प्रारंभिक PJAX कंटेनर