2010-02-26 8 views
5

में JQuery Not Parsing उचित रूप से attr ("href") पार्सिंग नहीं है मेरे पास वास्तव में एक बड़ा मुद्दा है कि मुझे उम्मीद है कि कोई व्यक्ति कुछ प्रकाश डाल सकता है। मैं एक अन्य वेबसाइट से एक एचटीपी प्रतिक्रिया प्राप्त करने के लिए Jquery का उपयोग कर रहा हूं (जो मेरा है)। एक बार जब मैं डोम प्राप्त करता हूं, तो मैं कुछ जानकारी प्राप्त करने के लिए इसके माध्यम से विश्लेषण करता हूं। हालांकि, जब मैं एक लिंक की href विशेषता प्राप्त करने का प्रयास करता हूं, तो IE स्थानीय डोमेन को href की शुरुआत में जोड़ रहा है!आईई

$.ajax({ 
        type: "POST", 
        url: "MyPage.aspx/GetWebResponse", 
        data: "http://myWebSite/pages/AnotherPage.aspx", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        asynch: false, 
        success: function(data) 
        { 
         var __htmlForMainPage = data.d;     


         var PageLink = $(__htmlForMainPage).find("a:contains('Get This Link')").attr("href"); 
               } 
       }); 

मेरे चर PageLink "/pages/getThisPage.aspx?id=8347" किया जाना चाहिए:

यहाँ मेरी कोड है। हालांकि, इसे "http://myserver/pages/getThisPage.aspx?id=8347" के रूप में वापस किया जा रहा है।

यह केवल आईई में हो रहा है। फ़ायरफ़ॉक्स ठीक है। यह तब भी होता है जब मैं इसे सर्वर पर डालता हूं। जब मैं इसे स्थानीय रूप से चलाता हूं, तो सबकुछ ठीक काम करता है, आईई और एफएफ दोनों में। लेकिन जब मैं इसे सर्वर पर डालता हूं, एफएफ अभी भी ठीक काम करता है, लेकिन आईई नहीं करता है।

क्या किसी ने इसे पहले देखा है, या पता है कि यहां क्या हो रहा है? कोई भी मदद बहुत ही सराहनीय होगी!

+0

मैं नहीं जानता कि क्या हो रहा है, लेकिन मैं बहुत गंभीरता से संदेह होता है कि यह एक jQuery मुद्दा है। इस तरह की स्थिति में यूआरएल पुनर्लेखन जैसी कुछ भी करने के लिए jQuery में कोई कोड नहीं है। – Pointy

उत्तर

9

आईई में A तत्व की href डीओएम संपत्ति का उपयोग करते समय, यह यूआरएल के पूर्ण पथ को वापस कर देगा। आईई 7 और 0 में getAttribute() के लिए भी यही सच है (चूंकि GetAttribute IE8 तक टूटा गया था)।

http://msdn.microsoft.com/en-us/library/cc848861(VS.85).aspx:

इंटरनेट एक्सप्लोरर 8 या बाद में। IE8 मोड में, का मान HREF विशेषता के संदर्भ के संदर्भ पर निर्भर करता है। दस्तावेज़ ऑब्जेक्ट मॉडल (डीओएम) विशेषता के रूप में पढ़ते समय, एचआरईएफ वेब पेज होस्ट करने वाले डोमेन से संबंधित एक यूआरएल देता है। एचआरईएफ पेज लेखक द्वारा निर्दिष्ट मान देता है जब पृष्ठ को पहले दस्तावेज़ संगतता मोड में प्रदर्शित किया जाता है, या पृष्ठ को ब्राउज़र के पुराने संस्करण के साथ देखा जाता है, तो सामग्री विशेषता के रूप में पढ़ा जाता है। अधिक जानकारी के लिए, इंटरनेट एक्सप्लोरर 8 में विशेषता अंतर देखें।

jQuery हमेशा डोम संपत्ति लायेगा अगर नामकरण परंपरा में एक ही है:

// If applicable, access the attribute via the DOM 0 way 
if (name in elem && notxml && !special) { 
    // ... 
} 

name in elem हिस्सा यहाँ अगर एक डोम संपत्ति निर्दिष्ट किया गया है देखने के लिए जाँच कर रहा है। आईई 8 के लिए इसके आसपास काम करने के लिए आप अपरकेस में संपत्ति निर्दिष्ट कर सकते हैं - .attr("HREF") - क्योंकि डीओएम गुण केस संवेदनशील हैं। दुर्भाग्य से IE7 और निचले हिस्से के लिए केवल वैकल्पिक हल के लिए एक स्ट्रिंग की जगह प्रदर्शन करने के लिए है: यूआरएल विशेषताओं के लिए

var base = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1); 
PageLink = PageLink.replace(base, ""); 
+0

धन्यवाद एंडी। मैं निश्चित रूप से आपकी मदद की सराहना करता हूं। ऐसा लगता है कि मुझे IE के लिए ब्राउज़र संस्करणों की जांच करने के लिए कुछ कोडिंग जोड़नी होगी, और कुछ हेरफेर करना होगा। एक बार फिर धन्यवाद! – vcuankit

+0

यह jQuery 1.3.2 में तय किया गया था: http://bugs.jquery.com/ticket/2747। लेकिन यह अभी भी मार्कअप के लिए टूटा हुआ है जो अजाक्स कॉल के माध्यम से आता है। Http://blog.rapiddg.com/2010/08/ie7-href-normalization-and-ajax/ देखें – Aaron

2

यह एक jquery मुद्दा नहीं है, यह एक यानी quirk है। "http://myserver/pages/getThisPage.aspx?id=8347" उपाय करना आसान है। 'जगह' (http://myserver ',' ')।

+0

मत भूलना, सापेक्ष पथ वर्तमान निर्देशिका से संबंधित साइट रूट नहीं हैं। –

+0

@ एंडी: अगर आप यूरी की शुरुआत में स्लैश रखते हैं, जैसे उपयोगकर्ता 280823 करता है। लेकिन मुझे लगता है, तो यह अब एक सापेक्ष रास्ता नहीं है। ;) –

+2

यह एक jQuery मुद्दा नहीं है। JQuery अन्य "आईई quirks" सामान्यीकृत नहीं है? अगर दूसरों को नहीं, तो यह क्यों नहीं? – Aaron

1

"समस्या" है कि क्या आप अपने एचटीएमएल स्रोतों में देखते हैं क्या नहीं jQuery ब्राउज़रों डोम-ट्री में "देखता है" है।

इसका मतलब है कि आईई आपके संभावित डीओएम के ए-नोड्स के अंदर पूर्ण यूआरएल बचाता है (जबकि अन्य ब्राउज़र नहीं करते हैं, लेकिन यह ब्राउज़र के लिए वास्तव में प्रासंगिक नहीं है, क्योंकि यह केवल वैसे भी पूर्ण यूआरएल के साथ काम कर सकता है, इसलिए इसे जल्द या बाद में इस पूर्ण यूआरएल की गणना करना है)।

अब jQuery सिर्फ उन मूल्यों को वापस करता है जो डोम-पेड़ में संग्रहीत हैं।

यदि आप इसे सत्यापित करना चाहते हैं, तो बस Firebug प्राप्त करें! आप वहां डोम देख सकते हैं (और चूंकि IE8 आईई में भी कुछ समान है)।

0

विभिन्न ब्राउज़र अलग अलग चीजें वापस आ जाएगी। यूआरएल को सामान्य बनाना आपका काम है। मैं इस तरह एक रेगेक्स का उपयोग करता हूं:

var urlParts = /^(https?:\/\/.+?)?(\/.+?)(\?.*?)?$/.exec(href); 
var server = urlParts[1]; // maybe be '' depending on the browser 
var path = urlParts[2]; 
var query = urlParts[3]; 

तो आप पथ + क्वेरी चाहते हैं। getAttribute कार्य करने के लिए