2011-02-28 14 views
8

मैं एक HTML5 एप्लिकेशन लिख रहा हूं जो JSONP का उपयोग करके कुछ अलग स्रोतों से डेटा एकत्र कर रहा है। जीईटी के साथ मैं जो कुछ भी कर रहा हूं वह पूरी तरह से काम करता है। अब मैं डेटा पोस्ट करने की कोशिश कर रहा हूं, और मैंने एक दिलचस्प स्नैग में भाग लिया है। मुझे अपने आवेदन से दूसरे डेटा में डेटा पोस्ट करना होगा, जहां मेरा एप्लिकेशन स्थानीय मशीन से चल रहा है। मैं एक क्रॉस-प्लेटफार्म सक्षम मोबाइल एप्लिकेशन (पल्स/फ्लिपबोर्ड सोचता हूं) लिखने की कोशिश कर रहा हूं, इसलिए कोड हमेशा स्थानीय स्रोत से चल रहा होगा। JSONP पोस्ट करने के लिए अनुमति नहीं है, यह सिर्फ इस तरह (Post data to JsonP) क्रॉस-ओरिजिनिन संसाधन साझाकरण और फ़ाइल: //

  • CORS पर भरोसा करते हैं काम नहीं करता है - - के बाद से अनुरोध एक स्थानीय स्रोत से आ रही है

    • उपयोग JSONP: मेरे विचार प्रक्रिया इस प्रकार था file:// का उपयोग कर, मूल शीर्षलेख शून्य है। यह विफल किसी अन्य सर्वर (XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin)
    • का उपयोग बंद अनुरोध बाउंस करने के लिए अनुरोध का कारण बनता है - यह महंगा हो सकता है

    ब्राउज़रों मैं लक्षित कर रहा सब के सब आधारित वेबकिट हैं (iPad, प्लेबुक, एंड्रॉयड) , तो मैं सोच रहा हूं कि क्या उसी मूल नीति कोड में कोई भी क्रैक है जिसे मैं छीन सकता हूं? शायद iframe या postMessage का उपयोग कर कुछ?

  • +0

    "यह अनुरोध विफल होने का कारण बनता है (XmlHttpRequest त्रुटि: उत्पत्ति नल को एक्सेस-कंट्रोल-अनुमति-उत्पत्ति द्वारा अनुमति नहीं है)" - वर्तमान ब्राउज़र में इसकी अनुमति है, इसलिए सवाल पुराना है। – inf3rno

    उत्तर

    9

    के रूप में इसे बाहर बारी होगी, यह करने के लिए सबसे आसान तरीका है एक iframe के अंदर लक्ष्य यूआरएल को पोस्ट करने के लिए है। अधिकांश ब्राउज़रों पर वही मूल नीति आपको एक डोमेन से किसी अन्य असंबंधित डोमेन पर HTTP पोस्ट करने की अनुमति देती है। मैंने अपने पृष्ठ पर एक आईफ्रेम जोड़कर समस्या हल की, शुरुआत में स्थानीय बूटस्ट्रैपिंग पृष्ठ पर सेट किया गया। चूंकि वह पृष्ठ उसी डोमेन से लोड किया गया था, इसलिए मैं इसे स्क्रिप्ट के माध्यम से नियंत्रित करने में सक्षम हूं। मैंने फॉर्म को अपनी लक्षित साइट पर पोस्ट करने के लिए उपयोग किया, और यह निर्धारित करने के लिए परिणामों को मतदान किया कि मेरा कॉल सफल हुआ है या नहीं। यह सुरुचिपूर्ण नहीं है, लेकिन यह काम करता है।

    1

    यह जावास्क्रिप्ट पुस्तकालय लगभग निश्चित रूप से मदद कर सकता है:

    http://easyxdm.net/

    easyXDM is a Javascript library that enables you as a developer to easily work around the limitation set in place by the Same Origin Policy, in turn making it easy to communicate and expose javascript API’s across domain boundaries.

    ..

    At the core easyXDM provides a transport stack capable of passing string based messages between two windows, a consumer (the main document) and a provider (a document included using an iframe). It does this by using one of several available techniques, always selecting the most efficient one for the current browser. For all implementations the transport stack offers bi-directionality, reliability, queueing and sender-verification.

    +1

    लिंक के लिए धन्यवाद! यह बहुत अच्छा लग रहा है, लेकिन यह विशेष रूप से मेल नहीं खाता जो मैं खोज रहा था। यह आधुनिक वेबकिट आधारित ब्राउज़र की तरह दिखता है, जिसका उपयोग मैं मोबाइल प्लेटफ़ॉर्म को लक्षित कर रहा हूं, इसलिए विंडो संचार का उनका जवाब HTML5 पोस्टमेस विधि है। यह केवल तभी काम करता है जब ऐप के दोनों पक्ष संदेश पोस्ट कर रहे हों और प्राप्त कर रहे हों। –

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