2010-08-14 5 views
7

ajax, getJSON का उपयोग करने की कोशिश कर रहा है, और स्थानीय (गैर-सर्वर) विकास कंप्यूटर से बाहरी URL लाने के लिए इस तरह के कार्य। क्या एक ही मूल नीति को बाईपास करने का कोई तरीका है, ताकि मैं सर्वर पर अपलोड करने के बजाय स्थानीय रूप से परीक्षण कर सकूं?क्या स्थानीय एक्सेस के लिए जावास्क्रिप्ट/jQuery की समान मूल नीति को बाईपास करने का कोई तरीका है?

उत्तर

2

विकास के लिए आप किस ब्राउज़र का उपयोग कर रहे हैं, इस पर निर्भर करने के विभिन्न तरीके हैं। उदाहरण के लिए: FirefoxChrome

0

इस कोशिश (:

  • फ़ायरफ़ॉक्स (छिपकली) में, security.fileuri.strict_origin_policyfalse
  • करने के लिए सेट क्रोम में, विकल्प --allow-file-access-from-files

संदर्भ के साथ ब्राउज़र शुरू php curl ayax cross डोमेन - by google):

http://www.iacons.net/writing/2007/08/02/ajax-cross-domain-proxy/

http://www.phpfour.com/blog/2008/03/cross-domain-ajax-using-php/

http://jquery-howto.blogspot.com/2009/04/cross-domain-ajax-querying-with-jquery.html

0

इस के बाद से एक विकास समस्या है, न एक अंतिम-उपयोगकर्ता/कार्यक्षमता मुद्दा है, बजाय AJAX के पार करने के लिए डोमेन अपने विकास के वातावरण प्रॉक्सी के रूप में सेट अप करने के लिए हो रही पर ध्यान केंद्रित कर रहा है उत्पादन सर्वर से सबसे हालिया डेटा लाने के लिए। यह वास्तव में करना वास्तव में आसान है।

आपको अपने देव पर्यावरण में एक वेब सर्वर स्थापित करना होगा (यदि उसके पास पहले से कोई नहीं है), और उसके बाद सर्वर को 404 अनुरोधों को प्राप्त करने और फिर उत्पादन डेटा को प्रतिबिंबित करने के लिए कॉन्फ़िगर करना होगा। आप अपना सर्वर सेट अप कर सकते हैं ताकि केवल AJAX डेटा फ़ाइलों को उठाया जा सके (अन्यथा, यदि उत्पादन संपत्ति आपके विकास पृष्ठों पर दिखने लगती है तो यह अन्य फ़ाइलों को डीबग करने में भ्रमित हो जाएगी)। तो यदि http://dev.myserver.com/data/json/mydata.json गुम है, तो आपकी 404 स्क्रिप्ट http://prod.myserver.com/data/json/mydata.json प्राप्त करेगी और इसे क्लाइंट को प्रतिबिंबित करेगी। इस सेट-अप के बारे में अच्छी बात यह है कि आप नकली डेटा का बहुत आसानी से उपयोग कर सकते हैं: यदि फ़ाइल आपके देव पर्यावरण में है, तो आपकी AJAX स्क्रिप्ट प्राप्त होगी; लेकिन यदि आप उस फ़ाइल को मिटा या नाम बदलते हैं, तो आपको इसके बजाय उत्पादन डेटा मिल जाएगा। यह सुविधा इतनी उपयोगी रही है कि मैं इसे पर्याप्त अनुशंसा नहीं कर सकता।

आप XML के साथ काम कर रहे हैं, मैं अपने 404 प्रक्रिया text/html के Content-Type साथ उत्तर देता है 404. में HTTP हेडर डुप्लिकेट करने की सलाह देते हैं, आप किसी भी responseXML पार्स करने के लिए नहीं मिलेगा।

4

हमारे वेब ऐप को विकसित करते समय हमें वही आवश्यकता थी। यहां बताया गया है कि हमने यह कैसे किया:

ब्राउज़र और सर्वर केवल JSON के माध्यम से संवाद करते हैं।
सभी HTML को PURE (हमारे जेएस टेम्पलेट इंजन) का उपयोग कर ब्राउज़र में प्रस्तुत किया जाता है।
ब्राउज़र कोड इस तरह स्थानीय स्तर पर विकसित की है:

हम एप्लिकेशन के URL में एक host पैरामीटर जोड़ें:

http://localhost/app.html?host=test.beebole-apps.com 

उत्पादन में, JSON एक पोस्ट के साथ सर्वर के लिए भेजा जाता है।
लेकिन यहां AJAX कॉल के प्रभारी का कार्य host पैरामीटर पर प्रतिक्रिया करेगा और इसके बजाय JSONP इंजेक्शन (GET) बना देगा।

<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" /> 
  • f2309892 एक अस्थायी समारोह, एक यादृच्छिक नाम के साथ है, विधि है कि प्रतिक्रिया
  • json संभाल लेंगे को अंक JSON हम सर्वर को भेज

इसका मतलब यह है कि आपको कॉलबैक फ़ंक्शन में लिपटे जेसन की सेवा करने के लिए बैकएंड से कुछ सहयोग की आवश्यकता होगी:

f2309892(/*the json here*/); 

आकार सीमा को छोड़कर (आप एक जीईटी के साथ सर्वर पर एक बड़ा JSON नहीं भेज सकते हैं) यह एक हवा की तरह काम करता है।
एक अन्य लाभ यह है कि आप उसी स्थानीयहोस्ट से सभी अलग-अलग सिस्टम (विकास और परीक्षण) को कॉल कर सकते हैं।

+0

इस महान है! मुझे पता है कि आपके पास Pure का यह स्थानीय उपयोग http://beebole.com/pure/documentation/what-is-pure-and-why/ में नहीं है ... इसके अलावा - क्या आप अपने शब्दों को लिखने के लिए थोड़ा सा विस्तार कर सकते हैं http://beebole.com/pure/documentation/ में एक ट्यूटोरियल? – ina

+0

भी (बस सुनिश्चित करने के लिए) - 'http: //localhost/app.html? Host = test.beebole-apps।कॉम 'क्लाइंटसाइड पर है (जहां आप क्लाइंट को किसी प्रकार के वेब सर्वर या यूआरएल पेज़र के साथ ऐप डाउनलोड करते हैं ...) और यह 'test.beebole-apps.com' सर्वर को कॉल करता है? – ina

+0

शुद्ध एक जेएस लाइब्रेरी है जो JSON डेटा से HTML बनाती है। यह ब्राउज़र पर काम करता है। यदि आप ज़िप फ़ाइल डाउनलोड करते हैं, तो कुछ उदाहरणों के साथ ट्यूटोरियल नामक एक निर्देशिका होती है। – Mic

6

यहाँ सरल जवाब है: क्रोम --disable-वेब-सुरक्षा

स्रोत कोड से (chrome_switches.h):

// Don't enforce the same-origin policy. (Used by people testing their sites.) 
const char kDisableWebSecurity[]   = "disable-web-security"; 

मैं jquery.js उपयोग करने के लिए AJAX कॉल भेजना चाहते थे पोर्ट 8080 पर चल रहे एक Google Apps पायथन सर्वर। बस परीक्षण के लिए, मैं उसी मशीन पर ब्राउज़र और सर्वर को चलाने के लिए चाहता था।

मुझे सभी सुरक्षा बारीकियों को समझ में नहीं आता है, लेकिन अस्थायी विकास के लिए यह एक उचित कामकाज की तरह लगता है। जब तक मैं केवल इस ध्वज के साथ परीक्षण के लिए क्रोम का उपयोग करता हूं, यह कोई समस्या नहीं होनी चाहिए।

/अनुप्रयोग/गूगल \ Chrome.app/Contents/MacOS/Google \ क्रोम --disable-वेब-सुरक्षा

+0

के साथ स्क्रिप्ट टैग इंजेक्ट करते हैं, ऐसा करने से पहले क्रोम प्रक्रिया के सभी उदाहरणों को मारना याद रखें या यह काम नहीं करेगा। – Ferruccio

0

मुझे लगता है कि समस्या थी, भी:

यहाँ मैक ओएस एक्स के लिए पूरी कमान है , क्रोम का उपयोग करके और --allow-file-access-from-files विकल्प वास्तव में मदद नहीं करता था। स्क्रिप्ट अपने सर्वर वापस जाने के लिए की जरूरत पर वापस, मैं प्रतिक्रिया करने के लिए इन हेडर जोड़ा गया है और यह ठीक काम किया है: सर्वर को छू के बिना मुख्य एक्सचेंज

'Access-Control-Allow-Headers: X-KEY' 
1

का एक तरह की अनुमति के लिए

'Access-Control-Allow-Origin: http://localhost/' 

और एक दूसरे से -

फ़ायरफ़ॉक्स में समान मूल सुरक्षा नीति को बाईपास करने का सबसे तेज़ और आसान तरीका फोर्स कोर एड-ऑन स्थापित करना है। यह हर प्रतिक्रिया में उचित शीर्षलेख डालने से किसी भी सेवा के साथ काम करता है।

https://addons.mozilla.org/en-US/firefox/addon/forcecors/

+0

उल्लेख करने के लायक है कि स्थापित करने के बाद आपको दृश्य => टूलबार => एड-ऑन बार पर क्लिक करना होगा। फिर कॉर्स बटन दाएं तल में दिखाएगा इसे सक्षम करने के लिए उस पर क्लिक करें। मैंने एक्सपीआई को अनजिप किया और देखा कि एक बटन धक्का दिया गया था लेकिन बटन कभी नहीं देखा था। – HMR

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^