क्रोम का कहना है कि "संसाधन को स्क्रिप्ट के रूप में व्याख्या की गई लेकिन MIME प्रकार के पाठ / सादे के साथ स्थानांतरित कर दिया गया।"


316

एफएफ और सभी में, मेरी जावास्क्रिप्ट ठीक काम करती है। लेकिन क्रोम में यह संदेश देता है:

संसाधन को स्क्रिप्ट के रूप में व्याख्या किया गया लेकिन MIME प्रकार के पाठ / सादे के साथ स्थानांतरित किया गया।

मैंने सभी स्क्रिप्ट टैग की जाँच की है और वे सभी स्क्रिप्ट हैं MIME type="text/javascript"। यहां तक ​​कि यह jquery और jquery ui के साथ भी कहता है। Chrome में क्या गलत है?

इसके लिए क्या समस्या और तय है? क्या यह कुछ ऐसा है जिसे मुझे ब्राउज़र के 'विकल्प' में बदलना है या यह सर्वर से है, या क्या मुझे अपना कोड ट्विक करना है?


14
कुछ कोड मददगार होंगे। कंपाइलर (ब्राउज़र) को कभी भी दोष न दें, चाहे वह कितना भी आकर्षक क्यों न हो, क्योंकि आप लगभग हमेशा गलत ही होंगे।
msw

जिज्ञासा के रूप में, क्या आप html5 का उपयोग कर रहे हैं?
बोलो

जवाबों:


203

इसका मतलब है कि सर्वर एक जावास्क्रिप्ट HTTP प्रतिक्रिया के साथ भेज रहा है

Content-Type: text/plain

आपको जावास्क्रिप्ट प्रतिक्रिया भेजने के लिए सर्वर को कॉन्फ़िगर करने की आवश्यकता है

Content-Type: application/javascript

3
मैं Weblogic Server 11g का उपयोग कर रहा हूं, लेकिन मुझे नहीं पता कि मैं इसमें MIME को कहां कॉन्फ़िगर कर सकता हूं। कृपया, क्या आप मुझे रास्ता दिखा सकते हैं?
शाओज

6
हम्म क्या है जब कोई सर्वर नहीं है, लेकिन स्क्रिप्ट वास्तव में आपके स्थानीय फाइल सिस्टम पर एक JSONP फाइल है? मुझे लगता है कि तब चेतावनी को अनदेखा करें क्योंकि यह गंभीर नहीं है और आपके नियंत्रण से बाहर है?
हिप्पिट्रैएल

2
यह होना चाहिए content-type:application/javascript, हालांकि, application/x-javascriptहै एक आरएफसी या ECMAScript मानक।
जसदीप खालसा

इसी तरह के कई सवाल हैं। यह जवाब मेरे लिए एक आसान तय था: stackoverflow.com/a/12057490/1617395
जो लियो

@ जोएलियो: यह आईआईएस के लिए है।
SLACs

124

इसका jQuery या क्लाइंट-साइड स्क्रिप्ट कोड के किसी भी क्विक से कोई लेना- देना नहीं है। यह एक सर्वर-साइड समस्या है: सर्वर (इनसाइड एप्लिकेशन) क्लाइंट-साइड स्क्रिप्ट संसाधन के लिए अपेक्षित HTTP Content-Typeहेडर फ़ील्ड मान नहीं भेज रहा है । यह तब होता है जब वेब सर्वर अपर्याप्त रूप से कॉन्फ़िगर किया गया है, गलत कॉन्फ़िगर किया गया है, या सर्वर-साइड एप्लिकेशन (जैसे, PHP) क्लाइंट-साइड स्क्रिप्ट संसाधन उत्पन्न कर रहा है।

जावास्क्रिप्ट की तरह ECMAScript कार्यान्वयन के लिए उचित MIME मीडिया प्रकारों में शामिल हैं:

  • text/javascript( अप्रचलित के रूप में पंजीकृत , पदावनत नहीं; लेकिन अभी भी मान्य , और सर्वश्रेष्ठ समर्थित )
  • text/ecmascript( अप्रचलित के रूप में पंजीकृत , पदावनत नहीं; लेकिन अभी भी मान्य )
  • application/javascript
  • application/ecmascript

वे शामिल नहीं हैं application/x-javascript, जैसा कि ऊपर सूचीबद्ध MIME मीडिया प्रकार अभी तक मानकों के पेड़ में पंजीकृत हैं (इसलिए कोई आवश्यकता नहीं है, और अब कोई प्रयोग नहीं करना चाहिए, प्रयोगात्मक लोगों का उपयोग करना चाहिए)। सी एफ RFC 4329, "स्क्रिप्टिंग मीडिया प्रकार" (2005 CE) और मेरा टेस्ट केस: स्क्रिप्टिंग मीडिया प्रकारों के लिए समर्थन

एक समाधान सर्वर को कॉन्फ़िगर करना है यदि संभव हो, तो पहले से ही अनुशंसित है। अपाचे के लिए, यह निर्देश जोड़ने के रूप में सरल हो सकता है

AddType text/javascript .js

( विवरण के लिए अपाचे HTTP सर्वर प्रलेखन देखें)।

लेकिन अगर क्लाइंट-साइड स्क्रिप्ट संसाधन PHP की तरह सर्वर-साइड एप्लिकेशन द्वारा उत्पन्न होता है, तो Content-Typeहेडर फ़ील्ड मान को स्पष्ट रूप से सेट करना आवश्यक है , क्योंकि डिफ़ॉल्ट संभावना है text/html:

<?php
  header('Content-Type: text/javascript; charset=UTF-8');
  // ...
?>

(यह और इसी तरह के बयान किसी अन्य आउटपुट से पहले आने चाहिए - PHP मैनुअल देखें - अन्यथा, HTTP संदेश निकाय को पहले से ही शुरू माना जाता है और अधिक हेडर फ़ील्ड भेजने में बहुत देर हो चुकी है।)

सर्वर-साइड पीढ़ी क्लाइंट-साइड स्क्रिप्ट संसाधन के लिए आसानी से हो सकती है, भले ही आपके पास सर्वर पर .js फाइलें हों, यदि उनसे सेवा के रूप में टिप्पणियां हटा दी जाती हैं, यदि वे सभी एक बड़ी प्रतिक्रिया में पैक किए जाते हैं (कम करने के लिए) अनुरोधों की संख्या, जो अधिक कुशल हो सकती हैं), या उन्हें किसी अन्य तरीके से सर्वर-साइड एप्लिकेशन द्वारा कम से कम किया जाता है।


1
अगर हमारे पास सर्वर तक पहुंच नहीं है तो क्या होगा?
Adonis K. Kakoulidis

1
जिसके पास है, उसे खोजो।
पॉइंटएर्स

इस स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। बहुत सारे लोग कहते हैं कि कुछ अहंकारी हैं जैसे 'सिर्फ JSONP बच्चे को भेजें, आपको पता होना चाहिए कि यह कैसे करना है'। जब समय को ठीक तरह से समझाने के लिए लिया जाता है जैसे कि आपके पास, इसका दिन के रूप में स्पष्ट है। यह एक समस्या है जो मैंने कई हफ्तों तक तय की है। एक बार फिर धन्यवाद!

@ रिक -777: मैं आपके जवाब की सराहना नहीं करता हूं कि आपने अपने परिवर्तन पर भी टिप्पणी किए बिना अपना जवाब बदल दिया। आप मेरा उत्तर ध्यान से पढ़ें, तो आप पता है क्यों मेरा सुझाव text/javascriptसे अधिक application/javascript। यदि आपके पास यह विश्वास करने का कारण है कि application/javascriptअब बेहतर उत्तर है, तो आपको कम से कम अपने आप को एक टिप्पणी में समझाना चाहिए । यह अनुचित है कि मुझे आपके परिवर्तनों के बारे में जागरूक होने के लिए स्टैक ओवरफ्लो की अधिसूचना प्रणाली की आवश्यकता है। मैंने आपके परिवर्तनों को वापस ले लिया है, जिसे मैं फ्रॉडिंग कहता हूं , इस प्रश्न के उत्तर के लिए जहां मैं उन्हें अनुचित मानता हूं।
प्वाइंटेडर्स

19

जावा एप्लिकेशन सर्वरों के लिए जैसे कि वेबलॉजिक

1) सुनिश्चित करें कि आपकी weblogic.xml फ़ाइल त्रुटियों से मुक्त है

इस तरह:

    <?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    <context-root>MyWebApp</context-root>
</weblogic-web-app>

2) अपने web.xml फ़ाइल के लिए जावास्क्रिप्ट के लिए एक माइम प्रकार जोड़ें :

    ...
        </servlet-mapping>

        <mime-mapping>    
            <extension>js</extension>        
            <mime-type>application/javascript</mime-type>        
        </mime-mapping>

        <welcome-file-list>
    ...

यह अन्य जावा कंटेनरों के लिए भी काम करेगा - टॉमकैट आदि application/javascriptवर्तमान में एकमात्र वैध माइम-प्रकार है; दूसरों की तरह text/javascriptपदावनत किया गया है।

3) आपको अपना ब्राउज़र कैश साफ़ करने या CTRL-F5 हिट करने की आवश्यकता हो सकती है


7

मुझे यह समस्या थी और मुझे लगा कि इसे कैसे ठीक किया जाए।

यह तब होता है जब शैली (CSS) फ़ाइल PHP फ़ाइल से एक अलग एन्कोडिंग में होती है जो .css फ़ाइल का संदर्भ देती है

उदाहरण के लिए, यूनिक्स एनकोडिंग में jQuery.js का उपयोग करना और UTF-8 में index.php का उपयोग करना इस समस्या का कारण होगा, इसलिए आपको उन्हें UTF-8 या किसी भी अन्य एन्कोडिंग को तब तक बनाना होगा, जब तक कि यह समान हो।


7

यदि आप एक php फ़ाइल के साथ अपनी जावास्क्रिप्ट उत्पन्न कर रहे हैं, तो इसे अपनी फ़ाइल की शुरुआत के रूप में जोड़ें:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>

यदि आपके पास एक अलग हेडर परिभाषित है, तो उसे बदल दें ताकि आपको कोई त्रुटि न हो।
mopsyd

1
पॉइंटेड ईयर्स पोस्ट के साथ इसने मुझे एक ऐसे मुद्दे को ठीक करने में मदद की है, जिसका कोई जवाब नहीं था और मैं हफ्तों से अपने दिमाग को चला रहा हूं। बहुत बहुत धन्यवाद: डी ऐसा क्यों है जब मैं Google में टाइप करता हूं "PHP दस्तावेज़ में हेडर कैसे सेट करें" मुझे 1000 गलत परिणाम मिलते हैं जो मुझे कुछ नहीं करने के बारे में बताते हैं ताकि मुझे पता न चले, लेकिन मैंने आखिरकार आपकी पोस्ट को योग्य पाया।

3

अपने अपाचे httpd.conf में, बस इस तरह की एक पंक्ति जोड़ें:

AddType application/x-javascript .js

मेरी " .js" प्रविष्टि में IIS 8 MIME प्रकार के तहत "आवेदन / जावास्क्रिप्ट" था। जब मैंने " .js" प्रविष्टि को "एप्लिकेशन / एक्स-जावास्क्रिप्ट" में बदल दिया , तो यह काम कर गया! यह एक एक्सटीजेएस / ASP.NET / ExtDirect4DotNet एप्लिकेशन से उत्पन्न हुआ है
MacGyver

3

मुझे यह डीबग संदेश अन्य उत्तरों की तुलना में एक बड़े कारण के लिए मिला है: यह त्रुटि संदेश प्राप्त होता है जब आपको पर्याप्त नींद नहीं मिलती है और एक सीएसएस फ़ाइल के लिए सिंटैक्स का उपयोग करके एक जेएस फाइल को संदर्भित करता है। जैसे की,

<link rel='stylesheet' type='text/css' href='clearly_javascript.js'/>

बजाय

<script src='clearly_javascript.js'></script>

सोचा था कि मैं इसे यहाँ रखूंगा क्योंकि यह पहला पोस्ट है जो त्रुटि संदेश की खोज करते समय आता है।


2

अजीब मुद्दा है, लेकिन इससे मुझे अपने मुद्दे को हल करने में मदद मिली। कभी-कभी सबसे आसान चीजें भी पता लगाना मुश्किल होता है ...

इसके बजाय /js/main.cssमैंने अपने स्क्रिप्ट-टैग का उपयोग कियाjs/main.css

हाँ , यह वास्तव में एक फर्क पड़ा। मैं WAMP / Windows पर बैठा हूं और मेरे पास एक vhost नहीं है, लेकिन सिर्फ इस्तेमाल किया गया हैlocalhost/<project>

अगर मैं संदर्भ देता /js/main.cssहूं तो मैं संदर्भ देता हूंlocalhost/css/main.css और नहींlocalhost/<project>/css/main.css

जब आप इसके बारे में सोचते हैं, यह काफी स्पष्ट है लेकिन अगर कोई इस पर ठोकर खाता है तो मुझे लगा कि मैं इस जवाब को साझा करूंगा।


1

वास्तव में सर्वर पर मौजूद अपनी js फाइलों की जांच करें। मुझे यह समस्या थी और पता चला कि js फाइलें सर्वर पर अपलोड नहीं की गई थीं और सर्वर वास्तव में html पेज को बदले में लौटा रहा था - जो कि सर्वर पर डिफ़ॉल्ट दस्तावेज़ कॉन्फ़िगर किया गया था (जैसे default.html)


1

अगर आप जूमला पर काम कर रहे हैं! और ( .js) जावास्क्रिप्ट फ़ाइल को शामिल करने का प्रयास करते समय यह कष्टप्रद त्रुटि हो रही है , तो निम्न समाधान आपके लिए है।

सबसे संभावित समस्या यह है कि आप एक ऐसी .js फ़ाइल को शामिल करने की कोशिश कर रहे हैं जो वहां नहीं है , या आप बस गलत तरीके से हैं.js फ़ाइल को हैं, और जब जूमला! एक संसाधन नहीं मिलता है, तो सामान्य 404 संदेश के बजाय, यह पूर्ण वेब और सैलून आदि के साथ एक पूर्ण विकसित 404 संदेश देता है।

वेब ब्राउज़र इसकी व्याख्या कर रहा है, .jsजबकि इसका एक वेबपेज यह कह रहा है कि आवश्यक फ़ाइल नहीं मिली है

इसके लिए काम कर सकते हैं


1

मेरे लिए, यह केवल कुछ पृष्ठों पर हुआ क्योंकि मैंने इसका उपयोग मेरी समस्या के window.locationबजाय किया था $location.url(...);। पता लगाने के लिए कुछ समय लिया :)


0

मुझे वेब फ्रेमवर्क का उपयोग करते समय यह समस्या थी और संबंधित जावास्क्रिप्ट फ़ाइलों को नामित (फ्रेमवर्क द्वारा) जावास्क्रिप्ट फ़ोल्डर में स्थानांतरित करके इसे ठीक किया।


0

ऐसा होने पर एक सामान्य बात यह है कि यदि आप अपनी स्क्रिप्ट कॉल में शामिल करना भूल गएtype हैं। आपको इसे स्पष्ट रूप से सेट करना होगा, जैसा कि यह है - डब्ल्यू 3 के अनुसार - आवश्यक :

type(सामग्री-प्रकार): यह विशेषता तत्व की सामग्री की स्क्रिप्टिंग भाषा को निर्दिष्ट करती है और डिफ़ॉल्ट स्क्रिप्टिंग भाषा को ओवरराइड करती है। स्क्रिप्टिंग भाषा एक सामग्री प्रकार (जैसे, "text/javascript") के रूप में निर्दिष्ट है । लेखकों को इस विशेषता के लिए एक मूल्य प्रदान करना चाहिए। नहीं है कोई डिफ़ॉल्ट मान इस विशेषता के लिए।

फिर भी ऐसा लगता है कि ब्राउज़रों का डिफ़ॉल्ट मूल्य है plain/text

उदाहरण:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=en"></script>

आप अपने अपाचे कॉन्फ़िगरेशन में उस फ़ाइल एक्सटेंशन के लिए एक डिफ़ॉल्ट सेट कर सकते हैं:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>

0

इसके आईआईएस तो सुनिश्चित करें कि आपके के तहत यही कारण है कि common HTTP Featuresआप है Static Contentचालू


0

मेरे पास एक ही त्रुटि थी और अंत में (मेरे विशेष मामले में) मुझे तैनाती डिस्क्रिप्टर (web.xml) में एक समस्या मिली

समस्या:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>/</welcome-file>
</welcome-file-list>

समाधान:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/SessionController</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>desktop.jsp</welcome-file>
</welcome-file-list>

0

यदि आप स्प्रिंग MVC का उपयोग कर रहे हैं, तो आप स्प्रिंग डिस्पैच सर्वलेट से संसाधन फ़ाइल को बाहर करने के लिए निम्नलिखित mvan टैग जोड़ सकते हैं

<mvc:resources mapping="/js/*.js" location="/js/"/>
<mvc:resources mapping="/css/*.css" location="/css/"/>
<mvc:resources mapping="/images/*.*" location="/images/"/>

0

मेरे मामले में, सर्वर सही भेज रहा था Content-Typeलेकिन गलत के साथ Content-Encoding। सुनिश्चित करें कि आप केवल Content-Encoding: gzipgzipped संसाधनों के लिए सेट करें। इसके अलावा, सर्वर में हेडर तय करने के बाद (मेरे मामले में, Google क्लाउड स्टोरेज), मुझे कैशिंग के कारण हुए परिवर्तनों को ठीक से दर्शाने के लिए कुछ मिनट इंतजार करना पड़ा।


0

यदि आप AdonisJS (REST API, उदाहरण के लिए) का उपयोग कर रहे हैं, तो इससे बचने का एक तरीका इस तरह से प्रतिक्रिया हैडर को परिभाषित करना है:

response.safeHeader('Content-type', 'application/json')

-1

जब जावास्क्रिप्ट (इस मामले में jQuery) के माध्यम से एक सरणी में पृष्ठभूमि छवियों को बदलने की कोशिश कर रहा था, तो मैं एक ही मुद्दा था।

वैसे भी।

इसके अलावा:

m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')

यह करो:

eval("m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')");

क्रोम जावास्क्रिप्ट को खराब कर दिया जाता है, जब 'के साथ संरचित तत्व के अंदर एक चर को पार्स करने की कोशिश की जाती है। मेरे मामले में यह छवि सरणी डालने से ठीक पहले बंद हो गया। छवि url + छवि नाम (सरणी के अंदर) को पार्स करने के बजाय, यह छवि url को पार्स कर रहा था।

आपको शायद कोड के अंदर खोज करने और यह देखने की आवश्यकता है कि यह कहां होता है। FF, IE और अन्य सभी को यह समस्या नहीं है।


4
evalयदि आप इसकी मदद कर सकते हैं तो उपयोग न करें : javascripttoolbox.com/bestpractices/#eval
indra

-1

सिमोन-स्री द्वारा यहां पोस्ट किए गए उत्तर ने मेरी मदद की।

इससे मुझे अपने मुद्दे को सुलझाने में मदद मिली।

विजुअल स्टूडियो इंस्टॉलर में रजिस्ट्री में एक गलत लाइन जोड़ी जानी चाहिए।

regedit खोलें और इस रजिस्ट्री कुंजी पर एक नज़र डालें:

यहां छवि विवरण दर्ज करें

वह चाबी देखें? सामग्री प्रकार कुंजी? पाठ / सादे से पाठ / जावास्क्रिप्ट में इसके मूल्य को बदलें।

अंत में क्रोम फिर से आसान साँस ले सकता है।

मुझे ध्यान देना चाहिए कि विंडोज 7 पर डिफ़ॉल्ट रूप से न तो सामग्री प्रकार और न ही PercieveType हैं, इसलिए आप शायद उन दोनों को सुरक्षित रूप से हटा सकते हैं, लेकिन आपको जो न्यूनतम करने की आवश्यकता है वह है संपादित करें।

वैसे भी मुझे आशा है कि यह आपके लिए भी इसे ठीक कर देगा!

परिवर्तनों के बाद अपने सिस्टम को पुनरारंभ करना न भूलें।


हाय शम। साहित्यिक चोरी बुरी है। (mmmmkay?) मैंने एसओ दिशानिर्देशों के अनुसार साहित्यिक चोरी को दूर करने के लिए आपके उत्तर को संपादित किया है ।
शमूएल हैमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.