2011-04-07 32 views
9

पर प्रस्तुत करें हाय मैं एक XML दस्तावेज़ प्रस्तुत करने का एक तरीका ढूंढ रहा हूं, जिसे मैं एक नई ब्राउज़र विंडो में AJAX का उपयोग करके पुनर्प्राप्त करता हूं।एक्सएमएल दस्तावेज़ (AJAX कॉल के माध्यम से प्राप्त) को एक नई विंडो

मैं जेसीओएन डेटा को एक एमवीसी नियंत्रक को पोस्ट करने के लिए JQuery के AJAX() फ़ंक्शन का उपयोग कर रहा हूं। नियंत्रक एक स्ट्रिंग के रूप में एक्सएमएल देता है।

मैं जावास्क्रिप्ट में एक नई विंडो बनाने और कॉल करके सामग्री सामग्री सेट करने के लिए window.open() का उपयोग कर रहा हूं।

newwindow.document.clear(); 
newwindow.document.    
newwindow.document.write(jqXHR.responseText); 
newwindow.document.close(); 

नई विंडो के रूप में उम्मीद को खोलता है और अगर मैं पृष्ठ पर स्रोत देखने मैं अपने एक्सएमएल देखना (कहाँ jqXHR.responseText एक्सएमएल ajax() कॉल से लौट आए। है)। लेकिन (आप जानते थे कि कोई आ रहा था) ब्राउजर विंडो में कुछ नहीं दिखता है। जाहिर है अगर मैं पृष्ठ स्रोत को डिस्क पर सहेजता हूं और आउटपुट को उम्मीद के रूप में प्रस्तुत किया जाता है।

क्या कोई समाधान सुझा सकता है? बस मेरे मुख्य लक्ष्य को फिर से शुरू करने के लिए एक नई विंडो में एक XML दस्तावेज़ (AJAX कॉल के माध्यम से प्राप्त) प्रस्तुत करना है।

मुझे यह भी जोड़ना चाहिए कि मैं एक एक्सएसएलटी द्वारा आउटपुट आउटपुट देखना चाहता हूं। मेरे एक्सएमएल में यह प्रसंस्करण निर्देश है। बहुत धन्यवाद

संपादित करें --------------------------- समाधान जो मैं चाहता हूं -------- -----------------

सभी की टिप्पणियों और सुझावों के लिए धन्यवाद।

जिस समाधान के साथ मैं समाप्त हुआ था वह लक्ष्य = "_ खाली" के साथ एक फॉर्म था, फिर मैंने जेएसओएन को एक छिपे हुए क्षेत्र के रूप में फॉर्म में लिखा, और इसे मेरे नियंत्रक को पोस्ट किया जो एक्सएमएल लौटा JSON)। जब एक्सएमएल प्रतिक्रिया से वापस लौटा दिया गया था तो ब्राउज़र ने इसे अपेक्षित रूप से चिह्नित किया था। मुझे लगता है कि यह मूल प्रश्न का उत्तर नहीं है। लेकिन गैबी के नीचे एक समाधान है।

+0

क्या आप खिड़की में कच्चे एक्सएमएल देखना चाहते हैं, या आप "मानव अनुकूल" पठनीय रूप में वास्तविक XML दस्तावेज़ सामग्री को दिखाने के लिए एक्सएसएलटी रूपांतरण की तुलना में भी उम्मीद कर रहे हैं? – Pointy

+0

मैं एक्सएसएलटी रूपांतरण को देखना चाहता हूं – nixon

+0

एक्सएसएलटी के बारे में नहीं बल्कि एक्सएसएलटी प्रोसेसर के ब्राउजर आमंत्रण को पार करें। Retagging। –

उत्तर

7

है निम्नलिखित केवल फ़ायर्फ़ॉक्स और ओपेरा में काम करेंगे, लेकिन मुझे लगता है कि उल्लेख के लायक है ..

window.open('data:text/xml,' + encodeURIComponent(jqXHR.responseText)); 

क्रोम साथ काम करना चाहिए साथ ही यह लगता है कि window.open सामान्य यूआरएल से भिन्न रूप से व्यवहार करता है .. यदि आप क्रोम में परिणामी यूआरएल टाइप करते हैं तो यह वहां भी काम करता है ..


अद्यतनयह सभी ब्राउज़रों के साथ काम करता है!

बात यह है कि जावास्क्रिप्ट में xslt का उपयोग कर xml को tranform करने की क्षमता है।
लेकिन स्वचालित रूप से नहीं, इसलिए हमें एक्सएसएलटी फ़ाइल के संदर्भ में एक्सएमएल फ़ाइल खोजने और उसे लोड करने की आवश्यकता है। फिर हम जावास्क्रिप्ट में परिवर्तन कर सकते हैं और परिणामस्वरूप एचटीएमएल को नई विंडो में भेज सकते हैं।

स्वाभाविक रूप से आईई बाकी चीज़ों की तुलना में अलग-अलग काम करता है।

$.get('xml-file-here.xml', 
    function(xmlData){ 
        var xml = xmlData; 

        //extract the stylesheet so we can load it manually 
        var stylesheet; 
        for (var i=0;i<xml.childNodes.length;i++){ 
         if (xml.childNodes[i].nodeName =='xml-stylesheet') 
         { 
         stylesheet = xml.childNodes[i].data; 
         } 
        } 
        var items = stylesheet.split('='); 
        var xsltFile = items[items.length-1].replace(/"/g,''); 

        //fetch xslt manually 
        $.get(xsltFile, function(xsltData){ 
         var xslt = xsltData; 
         var transformed; 

         if (! window['XSLTProcessor']) 
         { 
          // Trasformation for IE 
          transformed = xml.transformNode(xslt); 
         } 
         else 
         { 
          // Transformation for non-IE 
          var processor = new XSLTProcessor(); 
          processor.importStylesheet(xslt); 
          var xmldom = processor.transformToDocument(xml); 
          var serializer = new XMLSerializer(); 
          var transformed = serializer.serializeToString(xmldom.documentElement); 
         } 

         var newwindow = window.open(); 
         newwindow.document.open(); 
         newwindow.document.write(transformed); 
         newwindow.document.close(); 
        }); 
    }); 
+0

से लिंक करता है धन्यवाद, यह उपयोगी है .. दुर्भाग्य से मुझे आईई में काम करने की आवश्यकता है: ओ। एक बिंदु के लायक हालांकि मुझे लगता है।, – nixon

+0

@ निक्सन, क्या आपके पास एकाधिक xslt से जुड़ा हुआ है या सिर्फ एक है? –

+0

हाय गैबी, बस एक – nixon

-1

आप एक buzzword खो सकते हैं, लेकिन आप एक खिड़की क्यों नहीं खोलते हैं जो नियंत्रक के यूआरएल को इंगित करता है?

+0

Becuase मुझे वर्तमान पृष्ठ से JSON डेटा पोस्ट करने की आवश्यकता है और मैं परिणाम को एक नई विंडो में खोलना चाहता हूं – nixon

-1

एक्सएमएल को टेक्स्टरेरा में लिखें। सीएसएस का उपयोग कर textarea शैली।

+0

क्या आप कुछ विवरण प्रदान कर सकते हैं कि आप '