दिलचस्प पोस्ट
एंड्रॉइड में एसडी कार्ड से मैं एक टेक्स्ट फाइल कैसे पढ़ सकता हूं? मुझे उम्मीद है कि सच / असत्य क्यों कार्य नहीं करता है? एक वीडियो फ़ाइल को एक html5 वीडियो प्लेयर के साथ Node.js स्ट्रीम करना ताकि वीडियो नियंत्रण काम करना जारी रखे? मैं जावा में दो स्ट्रिंग कैसे जोड़ूं? स्विंग जीयूआई में मान्य (), पुन: संशोधित () और अमान्य () के बीच का अंतर रेल: फ़ील्ड_ सूचकांक के लिए? एंड्रॉइड केस्टस्टोर फ़ाइल क्या है, और इसके लिए क्या उपयोग किया जाता है? जावास्क्रिप्ट में स्ट्रिंग मान की गणना, eval का उपयोग नहीं कर रहा है जब वापस ढेर में जोड़ा गया तो मैं टुकड़ा राज्य कैसे बनाए रख सकता हूं? एंड्रॉइड एल्पीसाइज़ मल्टीलाइन टेक्स्टव्यू नोड वस्तु और तत्व ऑब्जेक्ट के बीच का अंतर? अजगर का उपयोग करके एक सरल XML फ़ाइल बनाना दूरस्थ कंप्यूटर में कमांड को कैसे निष्पादित करें? जीसीएम का उपयोग कर कई एंड्रॉइड डिवाइसों को पुश नोटिफिकेशन भेजना इन (बीकंडिशन == नल) और (नाल == बीकंडशन) के बीच अंतर क्या है?

जावास्क्रिप्ट: मैं JSONP कैसे बनाऊँ?

मेरे पास दो डोमेन हैं, example1.com और example2.com

Example1.com से, मैं उदाहरण2.com पर मेरे पास एक जेएसओएन एपीआई कॉल करना चाहता हूं। यह जानकर कि यह अनुमति नहीं है, यह मुझे हुआ – यही कारण है कि JSON P को बनाया गया था।

सवाल यह है, मैं JSONP को सक्षम करने के लिए अपने JSON API को कैसे संशोधित कर सकता हूं?

असल में, मैं कॉलबैक एपीआई कैसे बनाऊं?

अद्यतन करें

मेरी सर्वर साइड भाषा PHP है

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट: मैं JSONP कैसे बनाऊँ?"

यह आसान है। बस GET में callback नामक पैरामीटर स्वीकार करें

फिर अपने डेटा के आसपास कॉलबैक जावास्क्रिप्ट फ़ंक्शन लपेटें।

PHP में उदाहरण:

 <?php $data = '{}'; // json string if(array_key_exists('callback', $_GET)){ header('Content-Type: text/javascript; charset=utf8'); header('Access-Control-Allow-Origin: http://www.example.com/'); header('Access-Control-Max-Age: 3628800'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); $callback = $_GET['callback']; echo $callback.'('.$data.');'; }else{ // normal JSON string header('Content-Type: application/json; charset=utf8'); echo $data; } 

यह विचार है कि जावास्क्रिप्ट कॉलबैक फ़ंक्शन के पहले पैरामीटर के रूप में जेएसएएन ऑब्जेक्ट के साथ कॉलबैक फ़ंक्शन को कॉल करने वाला एक जावास्क्रिप्ट फ़ाइल वापस करना है।

आप PHP में एरेज़ और ऑब्जेक्ट्स से JSON स्ट्रिंग (जो कि हमारे $data में मौजूद $data में है json_encode() बनाने के लिए अंतर्निहित json_encode() फ़ंक्शन का उपयोग कर सकते हैं।

JSONP सेवा का उपयोग करने के लिए, आप <script> टैग का उपयोग कर सकते हैं:

 <script> function receiver(data){ console.log(data); } </script> <script src="data-service.php?callback=receiver"></script> 

आपको सर्वर-साइड भाषा की आवश्यकता है, कॉलबैक पैरामीटर केवल एक GET पैरामीटर है, आप परम पढ़ते हैं, और आप फ़ंक्शन कॉल में JSON प्रतिक्रिया लपेटते हैं और आप इसे इस callback(jsonResponse); तरह प्रिंट करते हैं callback(jsonResponse);

मैं आपको पायथन के उपयोग से एक बहुत ही सरल उदाहरण देता हूं क्योंकि आप किसी सर्वर-साइड भाषा का उल्लेख नहीं करते हैं:

 import os import cgi form = cgi.FieldStorage() callback = form.getvalue('callback','') address = cgi.escape(os.environ["REMOTE_ADDR"]) json = '{"ip": "'+address+'", "address":"'+address+'"}' #Allow cross domain XHR print 'Access-Control-Allow-Origin: *' print 'Access-Control-Allow-Methods: GET' if callback != '': print 'Content-Type: application/javascript' result = callback+'('+json+');' else: print 'Content-Type: application/json' result = json print '' print result 

यह एक छोटी जेएसओएनपी सेवा का कोड है जिसे ज़ैक द्वारा किए गए क्लाइंट आईपी पते को पुनः प्राप्त किया गया था और यह Google App Engine पर होस्ट किया गया है।

मॉरीस ने आपको पहले से ही काम करने का एक उदाहरण दिया है मैं केवल इतना जोड़ूंगा कि आपको callback परम मौजूद है या नहीं, और यदि नहीं, तो जेसन डेटा को कोष्ठक के बिना वापस लौटाएं। तो मूल रूप से आपका एपीआई जेएसओएन JSON-P होने के प्रावधान के साथ callback दिया जाएगा।

JSON-P webservice का उपभोग करने के लिए, जब तक कि आप YUI या jQuery जैसे ढांचे का उपयोग न करते हों, तो आप स्क्रिप्ट नोड को गतिशील रूप से बना सकते हैं और इसके src attribute को webservice पर इंगित करने के लिए सेट कर सकते हैं। इसे फिर से दोहराए जाने से पहले डोम से नोड को हटाने की याद रखें, क्योंकि यह गतिशील स्क्रिप्ट नोड केवल एकल उपयोग है।

मुझे पता है कि मैं पार्टी के लिए देर कर रहा हूं, और जवाब में से एक में कोड की सुरक्षा के बारे में कोई टिप्पणी थी। इस बारे में एक अच्छा लेख है:

http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/

और यहां कोड है जिसे आप चलाना चाहिए:

 <?php header('content-type: application/json; charset=utf-8'); function is_valid_callback($subject) { $identifier_syntax = '/^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\x{200C}\x{200D}]*+$/u'; $reserved_words = array('break', 'do', 'instanceof', 'typeof', 'case', 'else', 'new', 'var', 'catch', 'finally', 'return', 'void', 'continue', 'for', 'switch', 'while', 'debugger', 'function', 'this', 'with', 'default', 'if', 'throw', 'delete', 'in', 'try', 'class', 'enum', 'extends', 'super', 'const', 'export', 'import', 'implements', 'let', 'private', 'public', 'yield', 'interface', 'package', 'protected', 'static', 'null', 'true', 'false'); return preg_match($identifier_syntax, $subject) && ! in_array(mb_strtolower($subject, 'UTF-8'), $reserved_words); } $data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); $json = json_encode($data); # JSON if no callback if( ! isset($_GET['callback'])) exit($json); # JSONP if valid callback if(is_valid_callback($_GET['callback'])) exit("{$_GET['callback']}($json)"); # Otherwise, bad request header('status: 400 Bad Request', true, 400); 
 // Adds script tag to head of the page function addScriptToHead(source, code, type) { var script = document.createElement('script'); if (type === 'js') { script.setAttribute('type', 'text/javascript'); } if (source !== '') { script.setAttribute('src', source); } if (code !== '') { if (document.all && !window.opera) { script.text = code; } else { script.innerHTML = code; } } document.getElementsByTagName('head')[0].appendChild(script); } // Callback function function addScriptToHead(any_param) { // do whatever needs to be done } //call example addScriptToHead('http://url_to_receiver_script/index.php&param=anything', '', 'js'); 

/// कॉलबैक स्क्रिप्ट को कॉलबैक फ़ंक्शन का नाम वापस करना चाहिए, अर्थात यदि आप ब्राउज़र में टाइप करते हैं

http: //url_to_receiver_script/index.php&param=anything

इसे केवल एक टेक्स्ट (मौजूदा प्रोसेसिंग फ़ंक्शन का नाम) वापस करना चाहिए: addScriptToHead (any_param)

किसी भी ब्राउज़र में एक घड़ी की तरह काम करता है

JQuery के साथ आसान, यह ग्राहक पक्ष है:

  $.ajax({ dataType: 'jsonp', data: "somedata="+somevalue, //this is very important since it's the callback we will and that allow cross domain jsonp: 'jsonp_callback', url: 'http://example2.com', //function we trigger on success success: ParseJson //error handling not working with jsonP //error: handleError }); function ParseJson(data) { for (var key in data) { if (data.hasOwnProperty(key)) { alert(key + " -> " + data[key]); } } } 

और सुनिश्चित करें कि आपको सर्वर से सही जेसन मिले;
और jsonp_callback परम वापसी करने के लिए मत भूलना, अन्यथा यह काम नहीं करेगा !!!!!
और यह वास्तव में है

उदाहरण यहां http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html मूल रूप से

 <script src=".../example2...?output=json;callback=loadit"></script> <script> alert( "I got this from example2 " + loadit); </script> 

आप इसे बनाने के लिए PHP के लिए सरल JSON का उपयोग कर सकते हैं! यह सब कुछ सरल!

 <?php include('../includes/json.php'); $json = new json('callback', 'myCallback'); $object = new stdClass(); $object->FirstName = 'John'; $object->LastName = 'Doe'; $array = array(1,'2', 'Pieter', true); $jsonOnly = '{"Hello" : "darling"}'; // Add objects to send $json->add('status', '200'); $json->add("worked"); $json->add("things", false); $json->add('friend', $object); $json->add("arrays", $array); $json->add("json", $jsonOnly, false); /* Expected result : myCallback({ "status": "200", "worked": true, "things": false, "friend": { "FirstName": "John", "LastName": "Doe" }, "arrays": [ 1, "2", "Pieter", true ], "json": { "Hello": "darling" } }); */ $json->send(); ?>