मैं एक Ajax.request
बना रहा हूं। Ajax.request
टच 2 एप्लीकेशन ( Ajax.request
में लपेटा हुआ) में एक दूरस्थ PHP सर्वर पर Ajax.request
।
सर्वर से प्रतिक्रिया निम्न है:
XMLHttpRequest लोड नहीं कर सकता http://nqatalog.negroesquisso.pt/login.php उत्पत्ति
http://localhost:8888
तक प्रवेश-नियंत्रण-अनुमति-मूल द्वारा अनुमति नहीं है
- कुछ भी करने के लिए HTML फ़ॉर्म सबमिट नहीं करना चाहते
- मेरे AJAX आवेदन में वापस बटन पर कॉल को रोकना: मैं यह कुछ नहीं करना चाहता हूँ!
- जावास्क्रिप्ट में एक अनुरोध हैडर सेट करें
- प्रमाणीकरण त्रुटियों के बाद मैं PrimeFaces AJAX का उपयोग कर एक पाठ फ़ील्ड कैसे आबाद कर सकता हूं?
- एक अजाक्स कॉल के साथ फ़ंक्शन से वापसी मूल्य
- jQuery validator और AJAX का उपयोग करता है जो एक कस्टम नियम
मैं इस समस्या को कैसे ठीक करुं?
मैंने कुछ समय पहले इस मुद्दे पर एक लेख लिखा था, क्रॉस डोमेन AJAX ।
यदि आपको जवाब सर्वर पर नियंत्रण है तो इसे संभालने का सबसे आसान तरीका: के लिए एक प्रतिक्रिया हैडर जोड़ना है:
Access-Control-Allow-Origin: *
यह क्रॉस-डोमेन अजाक्स की अनुमति देगा। PHP में, आप इस तरह की प्रतिक्रिया को संशोधित करना चाहेंगे:
<?php header('Access-Control-Allow-Origin: *'); ?>
आप बस अपर कॉन्फ़िगरेशन या एचटीएक्सस फ़ाइल में Header set Access-Control-Allow-Origin *
सेटिंग डाल सकते हैं। यह सिर्फ एक जादू की तरह काम करता है
टिप्पणियों से, यह एक महत्वपूर्ण नोट है: वाइल्डकार्ड किसी भी डोमेन को आपके होस्ट पर अनुरोध भेजने की अनुमति दे रहा है। मैं एक विशेष डोमेन के साथ तारांकन को बदलने की सलाह देता हूं कि आप स्क्रिप्ट पर चलेंगे ।
यदि आपके पास सर्वर पर नियंत्रण नहीं है, तो आप इस तर्क को अपने क्रोम लॉन्चर में जोड़ सकते हैं: – --disable-web-security
ध्यान दें कि मैं इसे सामान्य "वेब सर्फिंग" के लिए उपयोग नहीं करूंगा संदर्भ के लिए, यह पोस्ट देखें: क्रोम में समान मूल नीति को अक्षम करें ।
एक आप वास्तव में आवेदन बनाने और डिवाइस पर लोड करने के लिए फोनगैप का उपयोग करते हैं, यह एक मुद्दा नहीं होगा
यदि आप अपाचे का उपयोग कर रहे हैं तो बस जोड़ें:
<ifModule mod_headers.c> Header set Access-Control-Allow-Origin: * </ifModule>
आपके कॉन्फ़िगरेशन में इससे इंटरनेट पर किसी भी अन्य साइट से आपके वेबसर्वर से सभी प्रतिक्रियाएं सुलभ होंगी। यदि आप अपने मेजबान पर केवल किसी विशिष्ट सर्वर द्वारा उपयोग की जाने वाली सेवाओं की अनुमति देते हैं तो आप मूल सर्वर के यूआरएल के साथ *
बदल सकते हैं:
Header set Access-Control-Allow-Origin: http://my.origin.host
यह पहला प्रश्न / उत्तर था जो मेरे लिए ऊपर उठाया गया था जब मेरे डेटा के स्रोत के रूप में एएसपी.नेट एमवीसी का उपयोग करते हुए एक ही समस्या को हल करने की कोशिश कर रहा था। मुझे एहसास है कि यह PHP प्रश्न हल नहीं करता है, लेकिन यह मूल्यवान होने के लिए पर्याप्त से संबंधित है।
मैं asp.net mvc का उपयोग कर रहा हूँ ग्रेग ब्रैन्ट के ब्लॉग पोस्ट ने मेरे लिए काम किया। अंत में, आप एक विशेषता बनाते हैं, [HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
, कि आप नियंत्रक कार्यों में जोड़ सकते हैं
उदाहरण के लिए:
public class HttpHeaderAttribute : ActionFilterAttribute { public string Name { get; set; } public string Value { get; set; } public HttpHeaderAttribute(string name, string value) { Name = name; Value = value; } public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.AppendHeader(Name, Value); base.OnResultExecuted(filterContext); } }
और उसके बाद इसका उपयोग करते हुए:
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")] public ActionResult MyVeryAvailableAction(string id) { return Json( "Some public result" ); }
यदि आपके पास ASP.NET / ASP.NET MVC अनुप्रयोग है, तो आप इस हैडर को Web.config फ़ाइल के माध्यम से शामिल कर सकते हैं:
<system.webServer> ... <httpProtocol> <customHeaders> <!-- Enable Cross Domain AJAX calls --> <remove name="Access-Control-Allow-Origin" /> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer>
मैट मोम्ब्रिया सर्वर साइड के लिए सही है, तो आप एक और समस्या में भाग ले सकते हैं जो श्वेतसूची में अस्वीकृति अस्वीकृति है।
आपको अपने phonegap.plist को कॉन्फ़िगर करना होगा। (मैं फोन के पुराने संस्करण का उपयोग कर रहा हूं)
कॉर्डोवा के लिए, नामकरण और निर्देशिका में कुछ बदलाव हो सकते हैं। लेकिन इस चरण में ज्यादातर एक ही होना चाहिए।
सबसे पहले सहायक फ़ाइलों का चयन करें> PhoneGap.plist
तब "बाहरीहोस्ट" के अंतर्गत
शायद " http://nqatalog.negroesquisso.pt " के मूल्य के साथ एक प्रविष्टि जोड़ें, मैं केवल डीबगिंग उद्देश्यों के लिए * का उपयोग कर रहा हूं।
मैं आपको इस एक के लिए एक सरल समाधान देगा मेरे मामले में मेरे पास सर्वर तक पहुंच नहीं है I उस स्थिति में आप एक्सेस-कंट्रोल-अनुमति-मूल को अनुमति देने के लिए अपने Google Chrome ब्राउज़र में सुरक्षा नीति बदल सकते हैं। यह बहुत आसान है:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
में सरल पेस्ट "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
स्थान भिन्न हो सकता है अब उस शॉर्टकट पर क्लिक करके क्रोम खोलें।
यह किसी भी व्यक्ति के लिए आसान हो सकता है जिसे रेफ़रलर के दोनों 'www' और 'non-www' संस्करणों के लिए अपवाद की आवश्यकता है:
$referrer = $_SERVER['HTTP_REFERER']; $parts = parse_url($referrer); $domain = $parts['host']; if($domain == 'google.com') { header('Access-Control-Allow-Origin: http://google.com'); } else if($domain == 'www.google.com') { header('Access-Control-Allow-Origin: http://www.google.com'); }
यदि आप क्रोमर का उपयोग कर रहे हैं तो यह प्लगइन उपयोग करें
यदि आप एक क्रोम एक्सटेंशन लिख रहे हैं और यह त्रुटि प्राप्त करें, तो सुनिश्चित करें कि आपने एपीआई के बेस यूआरएल को अपने manifest.json
की अनुमतियों को ब्लॉक किया है , उदाहरण:
"permissions": [ "https://itunes.apple.com/" ]
विभिन्न एपीआई के साथ काम करते समय मैंने इसे कई बार चलाया है I अक्सर "त्वरित और कॉलबैक =" जोड़ना है एक स्ट्रिंग के अंत में कभी-कभी एम्परसेंड को एक वर्ण कोड होना चाहिए, और कभी-कभी "?": "? Callback =?" (देखें jQuery के साथ forecast.io एपीआई उपयोग )
यह समान-मूल नीति के कारण है मोज़िला डेवलपर नेटवर्क या विकिपीडिया पर अधिक देखें।
मूल रूप से, आपके उदाहरण में, आपको http://nqatalog.negroesquisso.pt/login.php
पृष्ठ को केवल nqatalog.negroesquisso.pt
से लोड करने की आवश्यकता है, localhost
नहीं।
रेल पर रूबी में , आप एक नियंत्रक में कर सकते हैं:
headers['Access-Control-Allow-Origin'] = '*'
आप इसे ब्रॉसर बनाकर सर्वर को संशोधित किए बिना काम कर सकते हैं, जिसमें हेडर Access-Control-Allow-Origin: *
HTTP विकल्प 'प्रतिक्रियाओं में शामिल है।
क्रोम में, इस एक्सटेंशन का उपयोग करें । यदि आप मोज़िला पर हैं तो यह उत्तर देखें ।
हमें क्रोम में परीक्षण किए गए फोनगैप एप्लिकेशन के साथ भी यही समस्या है। क्रोम खोलने से पहले हर रोज बैच फाइल का इस्तेमाल करते हुए एक विंडोज़ मशीन। इसे चलाने से पहले याद रखें आपको कार्य प्रबंधक से क्रोम के सभी उदाहरण को साफ करने की आवश्यकता है या आप पृष्ठभूमि में नहीं चलने के लिए क्रोम का चयन कर सकते हैं।
बैच: (सीएमडी का उपयोग करें)
cd D:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security
यदि आप अपाचे के तहत हैं, तो बस इस सामग्री के साथ अपनी निर्देशिका में .htaccess फ़ाइल जोड़ें:
हैडर सेट एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: *
हेडर ने एक्सेस-कंट्रोल-अनुमति-हेडर सेट किया: सामग्री-प्रकार
हेडर ने ऐक्सेस-कंट्रोल-अनुमति-विधियों को सेट किया है: *
यदि आप इसे Angular.js में प्राप्त करते हैं, तो सुनिश्चित करें कि आप इस तरह से अपनी पोर्ट नंबर से बचें:
var Project = $resource( 'http://localhost\\:5648/api/...', {'a':'b'}, { update: { method: 'PUT' } } );
इसके बारे में अधिक जानकारी के लिए यहां देखें
रूबी सिनात्रा में
response['Access-Control-Allow-Origin'] = '*'
सभी के लिए या
response['Access-Control-Allow-Origin'] = 'http://yourdomain.name'
जब आप अनुरोध प्राप्त कर सकते हैं
var origin = (req.headers.origin || "*");
जब आपको प्रतिक्रिया देना है तो उस तरह से कुछ के साथ जाएं:
res.writeHead( 206, { 'Access-Control-Allow-Credentials': true, 'Access-Control-Allow-Origin': origin, } );
**Add this meta tag in your Webservice** header('Content-type: application/json'); header('Access-Control-Allow-Origin: *');
वाइल्डकार्ड एक बहुत ही सुरक्षित विकल्प नहीं है आप इसे अधिक विशिष्ट होना चाहते हैं – मैंने उसी प्रश्न पर यहां लिखा जवाब चेकआउट किया है; एक्सेस-कंट्रोल-अनुमति-मूल बाईपास कैसे करें?