एक दृष्टिकोण जिसे मैं उपयोग करना चाहता हूं, वह एक वस्तु शाब्दिक रूप से जसन को पैड / रैप करना और फिर .jsonp फ़ाइल एक्सटेंशन के साथ फाइल को सेव करना है। यह विधि आपकी मूल json फ़ाइल (test.json) को भी अनलेड कर देती है, क्योंकि आप इसके बजाय नई jsonp फ़ाइल (test.jsonp) के साथ काम कर रहे होंगे। रैपर पर नाम कुछ भी हो सकता है, लेकिन यह वही नाम होना चाहिए जो कॉलबैक फ़ंक्शन का उपयोग करता है जिसे आप jsonp प्रोसेस करने के लिए उपयोग करते हैं। मैं 'test.jsonp' फ़ाइल के लिए jsonp आवरण को दिखाने के लिए एक उदाहरण के रूप में पोस्ट किए गए आपके test.json का उपयोग करूँगा।
json_callback({"a" : "b", "c" : "d"});
इसके बाद, लौटे JSON को रखने के लिए अपनी स्क्रिप्ट में वैश्विक स्कोप के साथ एक पुन: प्रयोज्य चर बनाएं। यह केवल कॉलबैक फ़ंक्शन के बजाय आपकी स्क्रिप्ट में दिए गए अन्य JSON डेटा को आपकी स्क्रिप्ट में उपलब्ध कराएगा।
var myJSON;
इसके बाद स्क्रिप्ट इंजेक्शन द्वारा आपके जसन को पुनः प्राप्त करने के लिए एक सरल कार्य किया जाता है। ध्यान दें कि हम jQuery का उपयोग दस्तावेज़ हेड को स्क्रिप्ट को जोड़ने के लिए नहीं कर सकते हैं, क्योंकि IE j.append विधि का समर्थन नहीं करता है। नीचे दिए गए कोड में टिप्पणी की गई jQuery की विधि .append विधि का समर्थन करने वाले अन्य ब्राउज़रों पर काम करेगी। यह अंतर दिखाने के लिए एक संदर्भ के रूप में शामिल है।
function getLocalJSON(json_url){
var json_script = document.createElement('script');
json_script.type = 'text/javascript';
json_script.src = json_url;
json_script.id = 'json_script';
document.getElementsByTagName('head')[0].appendChild(json_script);
// $('head')[0].append(json_script); DOES NOT WORK in IE (.append method not supported)
}
अगला एक छोटा और सरल कॉलबैक फ़ंक्शन है (जिस नाम के साथ एक ही नाम है, jsonp आवरण) जो कि वैश्विक परिणाम में json परिणाम डेटा प्राप्त करता है।
function json_callback(response){
myJSON = response; // Clone response JSON to myJSON object
$('#json_script').remove(); // Remove json_script from the document
}
Json डेटा अब डॉट नोटेशन का उपयोग करके स्क्रिप्ट के किसी भी कार्य द्वारा पहुँचा जा सकता है। उदहारण के लिए:
console.log(myJSON.a); // Outputs 'b' to console
console.log(myJSON.c); // Outputs 'd' to console
यह तरीका थोड़ा अलग हो सकता है जो आप देखने के अभ्यस्त हैं, लेकिन इसके कई फायदे हैं। सबसे पहले, एक ही jsonp फ़ाइल को स्थानीय रूप से या सर्वर से समान फ़ंक्शन का उपयोग करके लोड किया जा सकता है। एक बोनस के रूप में, jsonp पहले से ही एक क्रॉस-डोमेन फ्रेंडली प्रारूप में है और इसे REST प्रकार API के साथ आसानी से उपयोग किया जा सकता है।
दी, कोई त्रुटि से निपटने वाले कार्य नहीं हैं, लेकिन आपको एक की आवश्यकता क्यों होगी? यदि आप इस विधि का उपयोग करके json डेटा प्राप्त करने में असमर्थ हैं, तो आप बहुत अधिक शर्त लगा सकते हैं कि आपको json के भीतर कुछ समस्याएँ हैं, और मैं इसे एक अच्छे JSON सत्यापनकर्ता पर जाँचूँगा।
JSON
स्ट्रिंग वापस करते हैं तो आप पहले से ही एक जावास्क्रिप्ट ऑब्जेक्ट प्राप्त कर रहे हैं, उपयोग करने की कोई आवश्यकता नहीं हैeval()
।