दिलचस्प पोस्ट
हस्केल में दो सूचियों को मर्ज करना क्या मैं अनुक्रमों को दोहराकर जावा में स्ट्रिंग्स बढ़ा सकता हूँ? कस्टम क्लास के प्रकार पर इंस्टेंस सदस्य का उपयोग नहीं किया जा सकता जावास्क्रिप्ट में स्क्रिप्ट को समाप्त कैसे करें जानिए कि इंटेंट। एक्शन_एसएएनडी में किस इरादे का चयन किया गया है? जावा के साथ एक ज़िप फ़ाइल में फ़ाइलों को जोड़ना स्मार्ट फोन की व्यापक श्रेणी तक पहुंचने के लिए ब्लैकबेरी के विकास में सबसे अच्छा अभ्यास क्या है? मैं एक if / ifish.js में अन्य क्या करूँ? एक .net फ़नक <T> को एक शुद्ध अभिव्यक्ति में परिवर्तित करना <Func <T >> JQuery का उपयोग करके सरणी के साथ ड्रॉपडाउन का चयन करें persistence.xml विभिन्न लेन-देन प्रकार के गुण सूचियों / ट्यूपल्स (सूची / ट्यूपल) को सॉर्ट करने के लिए कैसे करें? जावास्क्रिप्ट टर्नरी ऑपरेटर के साथ ऑपरेटर का अग्रभाग स्क्रॉल स्टॉप पर jQuery – बाइंड इवेंट कस्टम पैरामीटर के साथ Html.DropDownListFor ()

jQuery AJAX क्रॉस डोमेन

यहां दो पेज हैं, test.php और testerver.php

test.php

<script src="scripts/jq.js" type="text/javascript"></script> <script> $(function() { $.ajax({url:"testserver.php", success:function() { alert("Success"); }, error:function() { alert("Error"); }, dataType:"json", type:"get" } )}) </script> 

testserver.php

 <?php $arr = array("element1", "element2", array("element31","element32")); $arr['name'] = "response"; echo json_encode($arr); ?> 

अब मेरी समस्या: जब इन दोनों फाइलें एक ही सर्वर पर हैं (या तो स्थानीय होस्ट या वेब सर्वर), यह काम करता है और alert("Success") कहा जाता है; यदि यह अलग सर्वर पर है, जिसका अर्थ है वेब सर्वर पर testerver.php और localhost पर test.php, यह काम नहीं कर रहा है, और alert("Error") निष्पादित है। यहां तक ​​कि अगर एजेक्स के अंदर यूआरएल को बदल दिया जाए तो http://domain.com/path/to/file/testserver.php

Solutions Collecting From Web of "jQuery AJAX क्रॉस डोमेन"

JSONP का उपयोग करें

jQuery:

 $.ajax({ url:"testserver.php", dataType: 'jsonp', // Notice! JSONP <-- P (lowercase) success:function(json){ // do stuff with json (in this case an array) alert("Success"); }, error:function(){ alert("Error"); } }); 

पीएचपी:

 <?php $arr = array("element1","element2",array("element31","element32")); $arr['name'] = "response"; echo $_GET['callback']."(".json_encode($arr).");"; ?> 

गूंज गलत हो सकता है, जब से मैंने php का उपयोग किया है, यह कुछ समय हो गया है किसी भी मामले में आपको callbackName('jsonString') आउटपुट callbackName('jsonString') को आउटपुट करने की ज़रूरत है jQuery इसे अपना कॉलबैक नाम देगा, इसलिए आपको इसे प्राप्त पैरामीटर से प्राप्त करना होगा।

और स्टीफन केंडल ने पोस्ट किया, $ .getJSON () एक लघुकथा पद्धति है, लेकिन फिर आपको 'callback=?' जोड़ना होगा यूआरएल को जीईटी पैरामीटर के रूप में (हाँ, वैल्यू है?, jQuery इसकी अपनी कॉलबैक विधि से बदलता है)

JSONP एक अच्छा विकल्प है, लेकिन एक आसान तरीका है। आप बस अपने सर्वर पर Access-Control-Allow-Origin हेडर सेट कर सकते हैं। इसे * सेट करना किसी भी डोमेन से क्रॉस-डोमेन AJAX अनुरोध को स्वीकार करेगा। ( https://developer.mozilla.org/en/http_access_control )

ऐसा करने की विधि भाषा से भाषा में बदलती रहती है, बेशक। यहां रेल में है:

 class HelloController < ApplicationController def say_hello headers['Access-Control-Allow-Origin'] = "*" render text: "hello!" end end 

इस उदाहरण में, say_hello कार्रवाई किसी भी डोमेन से AJAX अनुरोध स्वीकार करेगी और "हैलो!"

ये हेडर्स का एक उदाहरण है जो इसे वापस कर सकता है:

 HTTP/1.1 200 OK Access-Control-Allow-Origin: * Cache-Control: no-cache, no-store, max-age=0, must-revalidate Content-Type: text/html; charset=utf-8 X-Ua-Compatible: IE=Edge Etag: "c4ca4238a0b923820dcc509a6f75849b" X-Runtime: 0.913606 Content-Length: 6 Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09) Date: Thu, 01 Mar 2012 20:44:28 GMT Connection: Keep-Alive 

यह जितना आसान है, इसमें कुछ ब्राउज़र सीमाएं हैं http://caniuse.com/#feat=cors देखें

आप एक्सेस-कंट्रोल-अनुमति-मूल जोड़कर इसे HTTP शीर्षलेख द्वारा नियंत्रित कर सकते हैं। इसे * पर सेट करना किसी भी डोमेन से क्रॉस-डोमेन AJAX अनुरोध को स्वीकार करेगा।

PHP का उपयोग करना वास्तव में सरल है, बस उस स्क्रिप्ट में निम्नलिखित पंक्ति जोड़ें जिसे आप अपने डोमेन के बाहर पहुंच प्राप्त करना चाहते हैं:

 header("Access-Control-Allow-Origin: *"); 

Httpd.conf में mod_headers मॉड्यूल को सक्षम करने के लिए मत भूलना

आपको एक ही मूल नीति पर एक नजर रखना चाहिए:

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

आप डेटा प्राप्त करने में सक्षम होने के लिए, यह होना चाहिए:

एक ही प्रोटोकॉल और मेजबान

आपको इसे हल करने के लिए JSONP को कार्यान्वित करने की आवश्यकता है।

मुझे स्थानीय डिस्क से वेबपेज को लोड करना पड़ा "फ़ाइल: /// सी: / टेस्ट / एचटीएमएल html html", "http: //localhost/getxml.php" यूआरएल को कॉल करें, और इसे IE8 + और Firefox12 + ब्राउज़र में करें, jQuery v1 का उपयोग करें .7.2 बॉयलरप्लेट कोड को न्यूनतम करने के लिए। दर्जनों लेखों को पढ़ने के बाद अंत में इसे लगा। यहाँ मेरा सारांश है

  • सर्वर स्क्रिप्ट (.php, .jsp, …) को http प्रतिसाद हेडर एक्सेस-कंट्रोल-अनुमति-उत्पत्ति वापस करना होगा: *
  • jQuery के AJAX का उपयोग करने से पहले यह झंडा जावास्क्रिप्ट में सेट करें: jQuery.support.cors = true;
  • आप jQuery अजैक्स फ़ंक्शन का उपयोग करने से पहले एक बार या हर बार फ्लैग सेट कर सकते हैं
  • अब मैं आईई और फ़ायरफ़ॉक्स में .xml दस्तावेज़ पढ़ सकता हूं। अन्य ब्राउज़रों में मैंने परीक्षण नहीं किया।
  • प्रतिक्रिया दस्तावेज़ सादे / पाठ, xml, json या कुछ और हो सकता है

यहां कुछ डिबग sysouts के साथ jQuery के एजेक्स कॉल का एक उदाहरण है।

 jQuery.support.cors = true; $.ajax({ url: "http://localhost/getxml.php", data: { "id":"doc1", "rows":"100" }, type: "GET", timeout: 30000, dataType: "text", // "xml", "json" success: function(data) { // show text reply as-is (debug) alert(data); // show xml field values (debug) //alert( $(data).find("title").text() ); // loop JSON array (debug) //var str=""; //$.each(data.items, function(i,item) { // str += item.title + "\n"; //}); //alert(str); }, error: function(jqXHR, textStatus, ex) { alert(textStatus + "," + ex + "," + jqXHR.responseText); } }); 

यह सच है कि एक ही मूल नीति जावास्क्रिप्ट को डोमेन के माध्यम से अनुरोध करने से रोकती है, लेकिन सीओआरएस विनिर्देश केवल आपको एपीआई एक्सेस की तरह दिखता है, और यह प्रमुख ब्राउज़रों के मौजूदा बैच द्वारा समर्थित है।

क्लाइंट और सर्वर के लिए पार-स्रोत संसाधन साझाकरण को सक्षम करने का तरीका देखें:

http://enable-cors.org/

"क्रॉस-ओरिजिन रिसोर्स शेयरिंग (सीओआरएस) एक विनिर्देश है जो डोमेन-सीमाओं में वास्तव में खुली पहुंच को सक्षम करता है। अगर आप सार्वजनिक सामग्री की सेवा करते हैं, तो कृपया सार्वभौमिक जावास्क्रिप्ट / ब्राउज़र एक्सेस के लिए इसे खोलने के लिए CORS का प्रयोग करें।"

यह संभव है, लेकिन आपको JSON नहीं, JSON का उपयोग करने की आवश्यकता है। स्टीफन के लिंक ने आपको सही दिशा में बताया। JQuery के AJAX पृष्ठ में JSONP पर अधिक जानकारी है।

रेमी शार्प में PHP का उपयोग करते हुए एक विस्तृत उदाहरण है ।

मैं अपाचे सर्वर का उपयोग करता हूं, इसलिए मैंने mod_proxy मॉड्यूल का उपयोग किया है मॉड्यूल सक्षम करें:

 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so 

फिर जोड़िए:

 ProxyPass /your-proxy-url/ http://service-url:serviceport/ 

अंत में, अपनी स्क्रिप्ट पर प्रॉक्सी-यूआरएल पास करें

ब्राउज़र सुरक्षा एक डोमेन से एक पृष्ठ पर एक अलग डोमेन पर होस्ट किए गए पेज पर एक एजेक्स कॉल करने से रोकता है; इसे " समान मूल नीति " कहा जाता है

JSONP का उपयोग करने के लिए कुछ उदाहरण हैं जिसमें त्रुटि हैंडलिंग शामिल है।

हालांकि, कृपया ध्यान दें कि त्रुटि-ईवेंट JSONP का उपयोग करते समय ट्रिगर नहीं हुआ है! देखें: http://api.jquery.com/jQuery.ajax/ या jjsp त्रुटि का उपयोग कर jQuery के एजेक्स अनुरोध

Jquery डॉक्स ( लिंक ) से:

  • ब्राउज़र सुरक्षा प्रतिबंधों के कारण, अधिकांश "अजाक्स" अनुरोध एक समान मूल नीति के अधीन होते हैं; अनुरोध किसी भिन्न डोमेन, उपडोमेन या प्रोटोकॉल से डेटा को सफलतापूर्वक पुनर्प्राप्त नहीं कर सकता।

  • स्क्रिप्ट और जेएसओएनपी अनुरोध समान मूल नीति प्रतिबंधों के अधीन नहीं हैं।

इसलिए मैं इसे ले जाऊंगा कि आपको अनुरोध के लिए jsonp का उपयोग करना होगा। लेकिन मैंने यह कोशिश नहीं की है

माइक्रोसॉफ्ट Azure के लिए, यह थोड़ा अलग है

एज़्योर में एक विशेष कॉरसेट सेटिंग है जिसे सेट होने की आवश्यकता है। यह अनिवार्य रूप से पर्दे के पीछे एक ही चीज़ है, लेकिन केवल जोशग्राह के शीर्षक को सेट करने से काम नहीं करेगा। क्रॉस डोमेन को सक्षम करने के लिए Azure प्रलेख यहां पाये जा सकते हैं:

https://docs.microsoft.com/en-us/azure/app-service-api/app-service-api-cors-consume-javascript

इस घंटों के साथ मैं कुछ घंटों के लिए अपने होस्टिंग प्लेटफॉर्म को साकार करने से पहले इस विशेष सेटिंग को देख रहा था।

क्रॉस मूल AJAX अनुरोधों के लिए, निम्न jQuery प्लगइन का उपयोग करें। https://github.com/jinujd/jQuery-Aynync-Form यह फिर से लोड किए बिना, अतुल्यकालिक काम करता है। यह AJAX नहीं है, लेकिन यह ज्यादातर मामलों में कार्य करता है