2010-02-08 10 views
21

मेरे पास क्रॉस डोमेन से संबंधित छोटी AJAX समस्या है जैसा कि मैंने इसे देखा है।AJAX समस्या - 200 फ़ायरबग में ठीक है लेकिन कोई प्रतिक्रिया शरीर के साथ लाल संदेश

localmachine पर मैं कुछ ajax के साथ एचटीएमएल उदाहरण बनाया: हर कीस्ट्रोक ajax पर पंजीकरण पाठ क्षेत्र उपयोगकर्ता प्रकार 'उपयोगकर्ता नाम', में स्थानीय बिलाव, जहां सर्वलेट चेकों को पहले से ही का इस्तेमाल किया और भेजता है 'यदि वह उपयोगकर्ता नाम है को भेज देता है वापस 'वापस प्रतिक्रिया।

स्थानीयहोस्ट पर कोई समस्या नहीं है। जैसे ही मैं टाइप करता हूं 'उपयोगकर्ता नाम' सर्वलेट 'लिया' प्रतिक्रिया भेजता है और ब्राउज़र इसे प्रदर्शित करता है।

लेकिन, जब मैं परीक्षण html पृष्ठ रिमोट मशीन पर ajax साथ (कुछ मुफ्त होस्टिंग दूरदराज के नेटवर्क पर) कि मेरे स्थानीय होस्ट बिलाव पर मान्यता अनुरोध भेजता शब्दों में कहें, कनेक्शन होने पर, बिलाव सांत्वना मैं देख अनुरोध आने में , और Mozzila इस में फ़ायरबग में कंसोल ouput है:

GET http://89.216.182.25:8080/Dinamicki1/UsernameServlet?username=zik 200 OK 

... लेकिन प्रतिक्रिया टैब में वहाँ सर्वलेट प्रतिक्रिया फ़ायरबग में 'लिया' और संदेश लाल रंग

में है नहीं है

तो सर्वर अच्छी तरह से संवाद करते हैं, कोई फ़ायरवॉल समस्या नहीं है, प्रतिक्रिया 200 OK
लेकिन प्रतिक्रिया निकाय खाली है।

फ़ायरबग में ये लाल संदेश क्या हैं?

अग्रिम में आपका बहुत बहुत धन्यवाद।

और अगर किसी को भी जावा के लिए एक कुछ गंभीर ajax ट्यूटोरियल यह अत्यधिक सराहना की जाएगी :) की सिफारिश कर सकते

उत्तर

17

आप अपने Ajax अनुरोध में कोई डोमेन-सापेक्ष URL उपयोग करने की आवश्यकता "जावा के लिए अजाक्स ट्यूटोरियल" के संबंध में, वास्तव में वास्तव में वास्तव में कोई नहीं है। वे सिर्फ दो अलग तकनीकें हैं। हालांकि मैं jQuery (क्लाइंट साइड के लिए) और Google Gson (सर्वर पक्ष के लिए) और JSON (क्लाइंट और सर्वर के बीच संचार भाषा के रूप में) के साथ शुरू करने की अनुशंसा करता हूं।

+0

@BalusC मैं डोमेन-सापेक्ष URL का उपयोग कर मेरी मदद नहीं करेगा जब ajax साथ एचटीएमएल कि मुफ्त होस्टिंग डोमेन और सर्वलेट कि से ajax अपने स्थानीय मशीन पर अब भी है कहा जाता है पर रहता है लगता है? तो मैं या तो इस प्रॉक्सी समाधान का उपयोग करता हूं या मैं अपने सर्वलेट को उसी मशीन पर ले जाता हूं जहां HTML और AJAX है? – reg

+2

आप क्रॉस-डोमेन अजाक्स अनुरोधों को फायर नहीं कर सकते हैं। निश्चित रूप से AJAX स्रोत और लक्ष्य दोनों एक ही डोमेन पर होना चाहिए। एक डोमेन-रिश्तेदार यूआरएल यह सुनिश्चित करने और संभावित बग को खोजने के लिए सबसे आसान तरीका है। 'Java.net.URLConnection' का उपयोग कर प्रॉक्सी सर्वलेट वास्तव में आपकी समस्या का समाधान कर सकता है। एक ही मशीन पर सभी को होस्ट करने के लिए बेहतर होगा। – BalusC

+0

मैंने बाद में एक व्यापक उत्तर लिखा है कि servlets और AJAX का उपयोग कैसे करें। यह ट्यूटोरियल के प्रकार के रूप में उपयोगी हो सकता है: [Servlets और Ajax का उपयोग कैसे करें?] (Http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax) – BalusC

5

आप AJAX उपयोग नहीं कर सकते अन्य डोमेन से प्राप्त उत्तरों को पढ़ने के लिए।

आपका HTML एक ही सर्वर (और एक ही डोमेन, पोर्ट, और प्रोटोकॉल) पर AJAX सर्वलेट के रूप में होना चाहिए।

2

फायरबग में 200 स्थिति की रिपोर्ट क्रॉस-डोमेन AJAX कॉल की वैधता को इंगित नहीं करती है, चाहे वह सफल हो या नहीं।

आप कॉल करने के लिए प्रॉक्सी विधि का उपयोग करने का प्रयास करना चाह सकते हैं।

उदा।

/Dinamicki1/UsernameServlet?username=zik

या एक संदर्भ के सापेक्ष URL (यह सोचते हैं कि पेज /Dinamicki1 से परोसा जाता है):

UsernameServlet?username=zik

JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls

1

मैं पता लगा कि यह कैसे this site से हल करने के लिए: "। को असत्य से सत्य फ़ाइल conf/web.xml में"

  1. लिस्टिंग "अपाचे बिलाव के माध्यम से निर्देशिका ब्राउज़िंग बदल पैरामीटर अनुमति देने के लिए"

  2. अपने पृष्ठ को C:/Documents and Settings/.../page.html पर कॉल करें, लेकिन localhost:8080/your_servlet_name (पृष्ठ index.html नाम से बेहतर है)।

इस तरह, आप AJAX अनुरोध localhost:8080/your_servlet_name/something_else पर कर पाएंगे।

0

मेरे लिए काम करने वाला एक समाधान यह था कि मुझे यूआरएल में "www" जोड़ना पड़ा! मैं यूआरएल रिवाइट का उपयोग कर रहा था, इसलिए मेरे पास जो भी यूआरएल था (छवि, जेएस, मिल, लोड, पोस्ट), मुझे पूर्ण यूआरएल का उपयोग करने की ज़रूरत थी, लेकिन यह "www" गायब था!

0

मेरे लिए, यह वेब एपीआई (सी # .NET) अनुरोध था और कोर सक्षम नहीं थे। नियंत्रक पर कोर के लिए जोड़ा गया हेडर और यह समस्या हल हो गई।

[EnableCors(origins: "*", headers: "*", methods: "*")] 
संबंधित मुद्दे