JSON

2012-11-12 20 views
5

संभव डुप्लिकेट के साथ क्रॉस-डोमेन अनुरोध:
Ajax cross domain callJSON

मेरा आवेदन एएसपी नेट जाल एपीआई 4.5 आरटीएम कि एचटीएमएल 5 और AJAX एक पर साथ सूचना का आदान उपयोग कर रहा है अलग डोमेन

इस आवेदन क्रमबद्धता/अक्रमांकन के लिए JSONP बजाय JSON का उपयोग करने के लिए आवश्यक है?

उत्तर

3

JSONP या JSON with padding बेस JSON डेटा प्रारूप के लिए एक पूरक है। यह एक अलग डोमेन में किसी सर्वर से डेटा का अनुरोध करने का एक तरीका प्रदान करता है, जो कि समान मूल नीति के कारण सामान्य वेब ब्राउज़र द्वारा प्रतिबंधित कुछ है।

उसी मूल नीति के तहत, server1.example.com से कार्य किया गया एक वेब पेज सामान्यतः server1.example.com के अलावा किसी सर्वर से कनेक्ट या संचार नहीं कर सकता है।

HTML तत्व एक अपवाद है। तत्वों के लिए खुली नीति का पता लगाने, कुछ पेज उन्हें जावास्क्रिप्ट कोड पुनर्प्राप्त करने के लिए उपयोग करते हैं जो गतिशील रूप से जेनरेट किए गए JSON- स्वरूपित डेटा को अन्य मूल से संचालित करता है। यह उपयोग पैटर्न JSONP के रूप में जाना जाता है।

JSONP के लिए अनुरोध JSON नहीं, लेकिन मनमाना जावास्क्रिप्ट कोड पुनर्प्राप्त करें। उनका मूल्यांकन जावास्क्रिप्ट दुभाषिया द्वारा किया जाता है, जिसे JSON पार्सर द्वारा पार्स नहीं किया जाता है।

यह देखने के लिए कि यह पैटर्न कैसे काम करता है, पहले एक यूआरएल अनुरोध पर विचार करें जो JSON डेटा देता है। उदाहरण के लिए, एक जावास्क्रिप्ट प्रोग्राम XMLHttpRequest के माध्यम से इस यूआरएल का अनुरोध कर सकता है। मान लीजिए फू की प्रयोक्ता-आईडी 1234. है एक ब्राउज़र URLhttp का अनुरोध: //server2.example.com/Users/1234, फू की पहचान गुजर, की तरह कुछ प्राप्त होगा:

{"Name": "Foo", "Id": 1234, "Rank": 7} 

यह JSON डेटा गतिशील हो सकता है यूआरएल में पारित क्वेरी पैरामीटर के अनुसार जेनरेट किया गया। यहाँ, किसी HTML तत्व अपने src के लिए निर्दिष्ट करता है एक यूआरएल है कि JSON रिटर्न विशेषता:

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234"> 
</script> 

ब्राउज़र, क्रम में, स्क्रिप्ट फ़ाइल,,, डाउनलोड इसकी सामग्री का मूल्यांकन करेंगे एक ब्लॉक के रूप में कच्चे JSON डेटा की व्याख्या और एक वाक्यविन्यास त्रुटि फेंक दें। यहां तक ​​कि यदि डेटा को जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक के रूप में व्याख्या किया गया था, तो ब्राउज़र में चल रहे जावास्क्रिप्ट द्वारा इसे एक्सेस नहीं किया जा सका, क्योंकि एक परिवर्तनीय असाइनमेंट ऑब्जेक्ट अक्षर के बिना पहुंच योग्य नहीं है।

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

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7}); 

समारोह कॉल JSONP की "पी" है - "पैडिंग" शुद्ध JSON के आसपास, या कुछ [1] "उपसर्ग" के अनुसार। सम्मेलन के अनुसार, ब्राउज़र कॉलबैक फ़ंक्शन का नाम नामित क्वेरी पैरामीटर के रूप में प्रदान करता है, आमतौर पर सर्वर के अनुरोध में JSONP या कॉलबैक नाम का उपयोग करता है, उदा।,

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234?jsonp=parseResponse"> 
</script> 

इस उदाहरण में, प्राप्त पेलोड होगा:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7});