क्रॉस मूल अनुरोध केवल HTTP के लिए समर्थित हैं, लेकिन यह क्रॉस-डोमेन नहीं है


88

मैं एक AJAX अनुरोध करने के लिए इस कोड का उपयोग कर रहा हूं:

$("#userBarSignup").click(function(){
    $.get("C:/xampp/htdocs/webname/resources/templates/signup.php",
        {/*params*/},
        function(response){
            $("#signup").html("TEST");
            $("#signup").html(response);
        },
        "html");

लेकिन Google क्रोम जावास्क्रिप्ट कंसोल से मुझे यह त्रुटि प्राप्त होती रहती है:

XMLHttpRequest फ़ाइल लोड नहीं कर सकता: /// C: /xampp/htdocs/webname/resources/templates/signup.php। क्रॉस मूल अनुरोध केवल HTTP के लिए समर्थित हैं।

समस्या यह है कि signup.php फ़ाइल को मेरे स्थानीय वेब सर्वर पर होस्ट किया गया है, जहां से सभी वेबसाइट चलाई जाती हैं, इसलिए यह क्रॉस-डोमेन नहीं है।

इस समस्या का समाधान किस प्रकार से किया जा सकता है?


5
क्या आपने शायद स्थानीय पथ के बजाय HTTP URL का उपयोग करने की कोशिश की है?
— एडवर्ड थॉमसन

1
मैं एक पूर्ण url
— डोमिनिक ग्रीन

2
@EdwardThomson यह काम किया! लेकिन अब मुझे allow_url_include = Onअपने सर्वर कॉन्फ़िगरेशन में सेट करना होगा ।
— सियानोनोन

जवाबों:


76

आपको वास्तव में एक वेबसर्वर चलाने की जरूरत है, और एक फ़ाइल के लिए अनुरोध करने के बजाय उस सर्वर पर एक यूआरआई के लिए अनुरोध प्राप्त करें; उदाहरण के लिए लाइन बदलें:

    $.get("C:/xampp/htdocs/webname/resources/templates/signup.php",

कुछ पढ़ने के लिए जैसे:

    $.get("http://localhost/resources/templates/signup.php",

और प्रारंभिक अनुरोध पृष्ठ को http पर भी बनाया जाना चाहिए।


इसने एकदम जादू की तरह काम किया। अब मुझे allow_url_include = Onअपने सर्वर कॉन्फ़िगरेशन में सेट करना होगा । क्या मैं इसे सुरक्षित रूप से सक्षम कर सकता हूं या यह कुछ सुरक्षा मुद्दों का कारण होगा?
— १।

$ .Get वास्तव में वेब ब्राउज़र की जावास्क्रिप्ट संदर्भ में जारी किया गया है, ताकि उस फ़ाइल को URL संदर्भ होना आवश्यक है - कोड जो php में लिखा गया है, वह अभी भी बिना समस्या के स्थानीय फ़ाइलों को संदर्भित कर सकता है
— पेटीएस

44
वैकल्पिक रूप से पायथन समाधान है: (1) फ़ोल्डर में एक कंसोल नेविगेट करें, (2) दर्ज करें python -m SimpleHTTPServer 8888, फिर (3) ब्राउज़र को नेविगेट करेंhttp://localhost:8888/
— जियोथेक्टरी

+1 ने मेरी समस्या को हल करने में बहुत मदद की । बहुत बहुत धन्यवाद :)
— प्रवीण

5
पायथन 3 उपयोगकर्ताओं के लिए ध्यान दें: उपयोगpython -m http.server 8888
— जेले फ्रेसेन

113

मुझे निम्नलिखित स्विच के साथ क्रोम शुरू करने का सौभाग्य मिला है:

--allow-file-access-from-files

ओएस एक्स पर (यदि आप पेस्ट कॉपी करते हैं तो डैश दोबारा टाइप करें):

open -a 'Google Chrome' --args -allow-file-access-from-files

अन्य पर * निक्स रन (परीक्षण नहीं)

 google-chrome  --allow-file-access-from-files

या खिड़कियों पर क्रोम शॉर्टकट के गुणों को संपादित करें और स्विच जोड़ें, जैसे

 C:\ ... \Application\chrome.exe --allow-file-access-from-files

"लक्ष्य" पथ के अंत तक


7
गूगल क्रोम में काम करता सिद्धांत रूप में, लेकिन ध्यान दें (सं .24 के रूप में कम से कम) ओएस एक्स पर आप इसे इस प्रकार आह्वान करना चाहिए कि: open -a 'Google Chrome' --args —allow-file-access-from-files। यह भी ध्यान दें: यदि आप एक फ़ाइल निर्दिष्ट करते हैं: // - आधारित URL (एक फ़ाइल-सिस्टम पथ के file://localhost/...बजाय ), इसके बजाय का उपयोग करना सुनिश्चित करें file:///...।
— mklement0

6
पिछली बार मैंने विंडोज़ में ऐसा करने की कोशिश की थी ऊपर की विधि काम नहीं करती थी। मैं निम्नलिखित स्विच के साथ डॉस प्रॉम्प्ट से क्रोम लॉन्च करने के लिए समाप्त हुआ ... अपूर्ण लेकिन व्यावहारिक।
— प्रूचफस

लिनक्स पर बढ़िया काम करता है।
— user1205577

OS X Yosemite 10.10.2 और Chrome संस्करण 41.0.2272.89 (64-बिट) पर ठीक काम करता है।
— दोस्त

86

यदि आप थोड़ा फ्रंट-एंड प्रोजेक्ट पर काम कर रहे हैं और इसे स्थानीय रूप से परीक्षण करना चाहते हैं, तो आप आमतौर पर इसे वेब ब्राउज़र में अपनी स्थानीय निर्देशिका को इंगित करके खोलेंगे, उदाहरण के लिए फ़ाइल में प्रवेश: अपने URL बार में .html करें। हालाँकि, यदि आपकी साइट संसाधनों को लोड करने का प्रयास कर रही है, भले ही वे आपके स्थानीय निर्देशिका में रखे हों, तो आप इस तरह की चेतावनी देख सकते हैं:

XMLHttpRequest फ़ाइल लोड नहीं कर सकता: ///home/erick/mysuperproject/mylibrary.js। क्रॉस मूल अनुरोध केवल HTTP के लिए समर्थित हैं।

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

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

हालांकि आलसी लोगों के लिए एक सरल और हल्का समाधान है। आप पायथन के सिंपलएचटीपीएसर्वर का उपयोग कर सकते हैं। यह पहले से ही अजगर के साथ बंडल आता है इसलिए आपको कुछ भी स्थापित या कॉन्फ़िगर करने की आवश्यकता नहीं है!

उदाहरण के लिए, अपनी परियोजना निर्देशिका के लिए सीडी

1 cd / home / erick / mysuperproject और फिर बस उपयोग करें

1 python -m SimpleHTTPServer और यह बात है, आपको यह संदेश आपके टर्मिनल में दिखाई देगा

1 0.0.0.0 पोर्ट 8000 पर HTTP http://0.0.0.0:8000परोस रहा है ... तो अब आप अपने ब्राउज़र पर वापस जा सकते हैं और अपनी सभी निर्देशिका फ़ाइलों के साथ वहां जा सकते हैं। आप पोर्ट और अन्य चीजों को कॉन्फ़िगर कर सकते हैं, बस प्रलेखन देखें। लेकिन यह बस चाल मेरे लिए काम करता है जब मैं एक नई लाइब्रेरी का परीक्षण करने या एक नए विचार का काम करने की जल्दी में हूं।

वहाँ तुम जाओ, खुश कोडिंग!

EDIT: पायथन 3+ में, SimpleHTTPServer को http.server के साथ बदल दिया गया है। इसलिए पायथन 3.3 में, उदाहरण के लिए, निम्न कमांड समतुल्य है:

python -m http.server 8000

5
आलसी समाधान भयानक है। बहुत सीधा, आपको कुछ और करने की जरूरत नहीं है।
— निको

समतुल्य नोड में मौजूद है। जेएस भी: सरल-http- सर्वर
— स्टैकहोला

विंडोज 8.1 पर, आपको अभी भी पायथन सं स्थापित करना होगा?
— J86

मैं विंडोज़ पर Xampp का उपयोग करता हूं, यह सरल है, थियो मैं नोड का उपयोग करने की सलाह
— दूंगा

10

मुझे केवल HTML फ़ाइलों को लोड करने की कोशिश करते समय एक ही त्रुटि मिल रही थी कि पेज को पॉप्युलेट करने के लिए JSON डेटा का उपयोग किया गया था, इसलिए मैंने समस्या को हल करने के लिए नोड.जेएस और एक्सप्रेस का उपयोग किया। यदि आपके पास नोड स्थापित नहीं है, तो आपको पहले नोड स्थापित करने की आवश्यकता है ।

  1. एक्सप्रेस स्थापित करें npm install express

  2. अपने प्रोजेक्ट के रूट फोल्डर में एक सर्वर.जेएस फाइल बनाएं, मेरे मामले में उन फाइलों के ऊपर एक फोल्डर जो मैं सर्वर में लाना चाहता था

  3. Server.js फ़ाइल में निम्नलिखित की तरह कुछ रखो और इस बारे में एक्सप्रेस gihub साइट पर पढ़ें :

    var express = require('express');
    var app = express();
    var path = require('path');
    
    // __dirname will use the current path from where you run this file 
    app.use(express.static(__dirname));
    app.use(express.static(path.join(__dirname, '/FOLDERTOHTMLFILESTOSERVER')));
    
    app.listen(8000);
    console.log('Listening on port 8000');
    
  4. Server.js सहेजने के बाद, आप सर्वर का उपयोग करके चला सकते हैं:

node server.js

  1. पर जाएं http://localhost:8000/FILENAMEऔर आपको उस HTML फ़ाइल को देखना चाहिए जिसे आप लोड करने का प्रयास कर रहे थे

4

यदि आपके पास नोडज स्थापित है, तो आप कमांड लाइन का उपयोग करके सर्वर को डाउनलोड और इंस्टॉल कर सकते हैं:

npm install -g http-server

निर्देशिका को उस निर्देशिका में बदलें जहाँ से आप फ़ाइलों की सेवा करना चाहते हैं:

$ cd ~/projects/angular/current_project 

सर्वर चलाएँ:

$ http-server 

जो http- सर्वर को शुरू करने वाले संदेश का उत्पादन करेगा, जिस पर काम करना:

पर उपलब्ध: http: // your_ip: 8080 और http://127.0.0.1:8080

जिससे आप अपने ब्राउज़र में url का उपयोग कर सकते हैं जैसे

http: // your_ip: 8080 / index.html


1

यह इस तरह से सबसे अच्छा काम करता है। सुनिश्चित करें कि दोनों फाइलें सर्वर पर हैं। Html पेज को कॉल करते समय, वेब पते का उपयोग करें जैसे: http:://localhost/myhtmlfile.htmlऔर नहीं C::///users/myhtmlfile.html। Usre के रूप में अच्छी तरह से है कि यूआरएल को पारित यूआरएल नीचे के रूप में चिह्नित एक वेब पता है:

$(function(){
                $('#typeahead').typeahead({
                    source: function(query, process){
                        $.ajax({
                            url: 'http://localhost:2222/bootstrap/source.php',
                            type: 'POST',
                            data: 'query=' +query,
                            dataType: 'JSON',
                            async: true,
                            success: function(data){
                                process(data);
                            }
                        });
                    }
                });
            });

0
REM kill all existing instance of chrome 
taskkill /F /IM chrome.exe /T
REM directory path where chrome.exe is located
set chromeLocation="C:\Program Files (x86)\Google\Chrome\Application"
cd %chromeLocation%
cd c:
start chrome.exe --allow-file-access-from-files
  1. अपने साथ क्रोमलोकेशन पाथ बदलें।

  2. .bat फ़ाइल के रूप में ऊपर सहेजें।

  3. आपके द्वारा बनाई गई बैच फ़ाइल पर ड्रॉप फ़ाइल को खींचें। (क्रोम पुनर्स्थापना पृष्ठ विकल्प देता है, हालांकि यदि आपके पास पृष्ठ खुले हैं तो बस पुनर्स्थापना हिट है और यह काम करेगा)।


0

आप php दुभाषिया का उपयोग करके अजगर के बिना एक सर्वर भी शुरू कर सकते हैं।

उदाहरण के लिए:

cd /your/path/to/website/root
php -S localhost:8000

अगर आप npm का विकल्प चाहते हैं तो यह उपयोगी हो सकता है, क्योंकि php यूटिलिटी कुछ OS '(मैक सहित) पर प्रीइंस्टॉल्ड आती है।


0

सभी अजगर उपयोगकर्ताओं के लिए:

बस टर्मिनल में अपने गंतव्य फ़ोल्डर पर जाएं।

cd projectFoder

उसके बाद Python3 + के लिए HTTP सर्वर शुरू करें:

python -m http.server 8000

HTTP पर :: पोर्ट 8000 (http: // [::]: 8000 /) ...

अपने लिंक पर जाएं: http://0.0.0.0:8000/

का आनंद लें :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.