ajax - Anchor Click and jQuery GET not working in FF and Safari but working in Chrome, why? -


प्रश्न
बहुत सरल: एक एंकर टैग की सामान्य क्लिक कार्यक्षमता के अलावा < कोड> & lt; a & gt; मैं एक एजेक्स GET अनुरोध को बंद करना चाहता हूं अगर एंकर पर क्लिक किया जाता है (मेरे उदाहरण में class value fire )।

महत्वपूर्ण : एंकर (href) के गंतव्य और साथ ही अजाक्स कॉल के गंतव्य को लक्ष्य यूआरएल में एक ही डोमेन मिलता है। / P>

उदाहरण jQuery कोड:

  $ (दस्तावेज़) .ready (function () {$ ('। Fire') क्लिक करें (फ़ंक्शन () {$ .get (" Http://example.com/rest/fire/ ");});});  

उदाहरण HTML कोड:

  & lt; a href = "http://example.com/index.html" class = "fire" & gt; यहां क्लिक करें & lt; / a & gt;  

क्रोम में (v38) एसिंक्रोनस "आग और भूलें" - प्राप्त अनुरोध भेजा जाता है और फिर ब्राउज़र लिंक किए गए पेज को दिखाता है फ़ायरफ़ॉक्स (v32) और सफारी (योसेमाइट) में, एसिंक्रोनस जीईटी अनुरोध को निकाल नहीं दिया जाता है। क्यों?

मैंने भी इसका परीक्षण किया है (मैं केवल एंकर को अनुरोध प्राप्त करता हूं, अजाक्स को / rest / fire के लिए अनुरोध नहीं)

समाधान फ़ाउंड (अद्यतन 28 अक्टूबर 2014)
यह सफारी और फ़ायरफ़ॉक्स में काम नहीं करता है क्योंकि $। Get () प्रति डिफ़ॉल्ट async मोड का उपयोग कर रहा है (जैसा कि मैं शुरू में इसे चाहता था हो)। हालांकि, अगर लक्ष्य डोमेन एंकर टैग, फ़ायरफ़ॉक्स और सफारी के यूआरएल के समान है, तो सिर्फ $। को प्राप्त करें () । इसलिए इसे काम करने के लिए, आपको एजक्स कॉल synchronously करना होगा!

अपडेट करें jQuery कोड (जो अभी भी फ़ायरफ़ॉक्स और क्रोम में काम करता है):

  $ (document) .ready (function () {$ ('। Fire') क्लिक करें (फ़ंक्शन () {$ .ajax ({url: "http://example.com/rest/fire/", async: false});});});  

समाधान फ़ाउंड (अद्यतित 28 अक्टूबर 2014)
यह सफारी और फ़ायरफ़ॉक्स में काम नहीं करता है क्योंकि $। Get () प्रति डिफ़ॉल्ट async मोड का उपयोग कर रहा है (जैसा कि मैं शुरू में इसे करना चाहता था)। हालांकि, अगर लक्ष्य डोमेन एंकर टैग, फ़ायरफ़ॉक्स और सफारी के यूआरएल के समान है, तो सिर्फ $। को प्राप्त करें () । इसलिए इसे काम करने के लिए, आपको एजक्स कॉल synchronously करना होगा!

अपडेट करें jQuery कोड (जो अभी भी फ़ायरफ़ॉक्स और क्रोम में काम करता है):

  $ (document) .ready (function () {$ ('। Fire') क्लिक करें (फ़ंक्शन () {$। एजेक्स ({url: "http://example.com/rest/fire/", async: false // आवश्यक सफारी और फ़ायरफ़ॉक्स});});});  

लेकिन मुझे अभी भी आश्वस्त है कि यह फ़ायरफ़ॉक्स और सफारी में एक बग है, यह भी async मोड के साथ काम करना चाहिए समस्या का मूल कारण सबसे संभवतः ब्राउज़र में कार्यान्वयन पर आधारित है कि वे एक डोमेन (एक कनेक्शन पर बहुसंकेतक, एकाधिक गैर-मल्टिप्लेक्स कनेक्शन?) से कनेक्शन कैसे स्थापित करते हैं ... शायद कोई जानता है?


Comments