Chrome गलत MIME प्रकार के कारण AJAX स्क्रिप्ट निष्पादित करने से इनकार करता है


146

मैं AJAX के माध्यम से JSON के रूप में एक स्क्रिप्ट का उपयोग करने की कोशिश कर रहा हूं, जो सफारी और अन्य ब्राउज़रों पर ठीक काम करता है लेकिन दुर्भाग्य से क्रोम में निष्पादित नहीं होगा। यह निम्नलिखित त्रुटि के साथ आ रहा है:

स्क्रिप्ट को '*' से निष्पादित करने के लिए मना कर दिया गया क्योंकि इसका MIME प्रकार ('एप्लिकेशन / json') निष्पादन योग्य नहीं है, और MIME प्रकार की जाँच करने में सख्त सक्षम है।

यहाँ अनुरोध है:

$.ajax({
    url: "http://some_url/test.json?callback=?",
    type: "GET",
    dataType: 'json',
    cache: true,
    success: function (data, status, error) {
      console.log('success', data);
    },
    error: function (data, status, error) {
      console.log('error', data, status, error);
    }
});

क्या इसके लिए किसी के पास वर्कअराउंड है?


2
तो, यह क्या स्रोत है? JSONP स्क्रिप्ट, या JSON फ़ाइल? क्या इसका MIME प्रकार मेल खाता है? जाहिरा तौर पर नहीं। वर्कअराउंड की आवश्यकता नहीं है, बस इसे ठीक करें
बरगी

कॉलबैक को हटाने और डेटा टाइप jsonp का उपयोग करने से समस्या ठीक नहीं होती है
पॉल निलिंगन

2
मेरा मतलब था, सर्वर प्रतिक्रिया को ठीक करें ।
बरगी

5
@ बर्गी: क्या होगा अगर सर्वर ओपी के नियंत्रण से बाहर है? हो सकता है वह लिंक्डइन जैसे किसी बाहरी एपीआई का उपयोग करने की कोशिश कर रहा हो ।
दान डेस्केल्सस्कु

2
@DanDascalescu: उसे इसे बग के रूप में रिपोर्ट करना चाहिए, क्योंकि यह API को अनुपयोगी बनाता है। यह तय होने की प्रतीक्षा करते समय, वह एक प्रॉक्सी का उपयोग कर सकता है जो माइम प्रकार या सामग्री को बदलता है।
बरगी

जवाबों:


70

कॉलबैक तर्क जोड़कर, आप jQuery को बता रहे हैं कि आप JSON के लिए XMLHttpRequest का उपयोग करते हुए स्क्रिप्ट के बजाय JSONP के लिए अनुरोध करना चाहते हैं।

JSONP JSON नहीं है। यह एक जावास्क्रिप्ट प्रोग्राम है।

अपना सर्वर बदलें ताकि यह JSONP के लिए सही MIME प्रकार का आउटपुट दे application/javascript

(जब आप इस पर हों, तो jQuery को बताना बंद कर दें कि आप JSON की अपेक्षा कर रहे हैं क्योंकि यह विरोधाभासी है:) dataType: 'jsonp'


1
मुझे दो साइटों के बीच ajax का उपयोग करना है। मुझे उनके बारे में बताएं कि आप "अपना सर्वर बदलें", ताकि यह JSONP के लिए सही MIME प्रकार को आउटपुट करे जो कि एप्लिकेशन / जावास्क्रिप्ट है। कैसे करें
तैमूर चांगैज

@TaimoorChangaiz - मैं आपको यह नहीं बता सकता। यदि आप स्थैतिक फ़ाइलें उत्पन्न कर रहे हैं, तो यह उस सर्वर पर निर्भर करता है जिसका आप उपयोग कर रहे हैं। यदि आप गतिशील रूप से सामग्री उत्पन्न कर रहे हैं, तो यह प्रोग्रामिंग भाषा (और संभवतः फ्रेमवर्क) पर निर्भर करता है जिसका आप उपयोग कर रहे हैं। एक सवाल पूछने की कोशिश करें जो बताता है कि आपके पास अभी तक क्या है और वास्तव में आप कहाँ फंस गए हैं।
क्वेंटिन

धन्यवाद दोस्त। Btw मैं समझ से बाहर मुद्दा है। मैं डायनामिक फ़ाइलों का उपयोग कर रहा था
तैमूर चंगेज़

20
यदि आप बाहरी API जैसे LinkedIn का उपयोग करने का प्रयास कर रहे हैं, तो "अपना सर्वर बदलें" काम नहीं करता है ।
दान डैस्कलेस्क्यू

1
@ क्वेंटिन यह मायने रखता है क्योंकि प्रश्नों को केवल ओपी के लिए नहीं बल्कि दूसरों के लिए मददगार माना जाता है। Google ने मुझे यहाँ बताया और इससे मेरे मामले में मदद नहीं मिली
जुआन मेंडेस

56

यदि आपका प्रॉक्सी सर्वर या कंटेनर .js फ़ाइल की सेवा करते समय निम्नलिखित हेडर जोड़ता है, तो यह कुछ ब्राउज़र जैसे क्रोम को MIME प्रकारों की सख्त जाँच करने के लिए मजबूर करेगा:

X-Content-Type-Options: nosniff

Chrome को MIME चेक करने से रोकने के लिए इस शीर्ष लेख को निकालें।


14
वेब एप्लिकेशन में दिए गए संसाधनों का कंटेंट-टाइप हेडर प्रदान नहीं करना एक बुरा अभ्यास है। सर्वर-साइड ( X-Content-Type-Options: nosniffहेडर का उपयोग करके ) से MIME सूँघने से बचना सामग्री-सूँघने के हमलों को रोकने के लिए एक अच्छा विकल्प है।
एंड्रेस मोरालेस

मुझे इसे एक सुरक्षा ऑडिट के हिस्से के रूप में जोड़ना था - अब मुझे नहीं पता कि क्या करना है !! :-(
जेम्स पौलोज

11

FYI करें, मुझे क्रोम कंसोल से एक ही त्रुटि मिली है। मुझे लगा कि मेरा AJAX फंक्शन इसका कारण बन रहा है, लेकिन मैंने अपनी मिनिफ़ाइन्ड स्क्रिप्ट को इसमें से हटा /javascripts/ajax-vanilla.min.jsदिया /javascripts/ajax-vanilla.js। लेकिन वास्तव में स्रोत फ़ाइल में था /javascripts/src/ajax-vanilla.js। तो क्रोम में आपको खराब MIME प्रकार की त्रुटि हो रही है, भले ही फ़ाइल नहीं मिली हो। इस स्थिति में, त्रुटि संदेश text/plainखराब MIME प्रकार के रूप में वर्णित है ।


1
आपका बहुत बहुत धन्यवाद! यह मेरी समस्या थी। यह गलत डायरेक्टरी में था।
एलिसन

2
तुमने मुझे आज 1 घंटा बचाया! धन्यवाद
बेटियो एविगा

1

मुझे कस्टम ४०४ त्रुटि पेज के साथ IIS IIS.० का उपयोग करके इस त्रुटि का सामना करना पड़ा, हालाँकि मुझे संदेह है कि यह किसी ४०४ पृष्ठ के साथ होगा। सर्वर ने एक पाठ / html माइम प्रकार के साथ एक html 404 प्रतिक्रिया लौटा दी जो (सही तरीके से) निष्पादित नहीं की जा सकती थी।


हमारे पास समान मुद्दा था, लौटाई गई सामग्री 302 थी (क्योंकि उपयोगकर्ता अप्रमाणित हो गया था) और इसमें बिल्कुल भी सामग्री नहीं थी -> गैर-निष्पादन योग्य।
पासी सावोलनें

1

रिकॉर्ड और Google खोज उपयोगकर्ताओं के लिए , यदि आप .NET कोर डेवलपर हैं, तो आपको सामग्री-प्रकारों को मैन्युअल रूप से सेट करना चाहिए, क्योंकि उनका डिफ़ॉल्ट मान शून्य या रिक्त है:

var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});

0

मेरे मामले में, मैं उपयोग करता हूं

$.getJSON(url, function(json) { ... });

अनुरोध करने के लिए (फ़्लिकर के एपीआई के लिए), और मुझे वही MIME त्रुटि मिली। ऊपर दिए गए उत्तर की तरह, निम्नलिखित कोड जोड़कर:

$.ajaxSetup({ dataType: "jsonp" });

समस्या को ठीक किया गया और मुझे अब Chrome के कंसोल में MIME प्रकार की त्रुटि दिखाई नहीं दे रही है।


0

यदि अनुप्रयोग IIS पर होस्ट किया गया है, तो सुनिश्चित करें कि स्थैतिक सामग्री स्थापित है। कंट्रोल पैनल> प्रोग्राम> विंडोज सुविधाओं को चालू या बंद करें> इंटरनेट सूचना सेवाएं> वर्ल्ड वाइड वेब सेवाएं> सामान्य HTTP विशेषताएं> स्टेटिक कंटेंट।

नई IIS 10.0 स्थापना पर मौजूदा एप्लिकेशन को चलाने का प्रयास करते समय मुझे इस समस्या का सामना करना पड़ा

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