2016-10-21 6 views
5

मैं URL से संपूर्ण एचएमटीएल दस्तावेज़ प्राप्त करने के लिए fetch API का उपयोग करना चाहता हूं।क्यों स्थिति = 0 के साथ प्रतिक्रिया वापस लाती है?

let config = { 
method: 'GET', 
headers: { 
    'Content-Type': 'application/json', 
    'Accept': 'text/html', 
    'Accept-Language': 'zh-CN', 
    'Cache-Control': 'no-cache' 
}, 
mode: 'no-cors'}; 

fetch('http://www.baidu.com', config).then((res)=> { 
console.log(res);}).then((text)=> {}); 

क्रोम में कोड चलाएं, यह एक अनुरोध को ट्रिगर करता है और क्रोम नेटवर्क में एचटीएमएल देता है। लेकिन रेस वापसी लाने:

enter image description here

क्यों स्थिति है और कैसे मैं क्रोम Newwork में क्या की तरह सही रेस मिल सकता है?

+0

स्थिति 0 लाइब्रेरी निर्भर है, किस पुस्तकालय से 'fetch' फ़ंक्शन है? – tcooc

+0

'fetch' एक मूल कार्य है (अब)। – Brian

उत्तर

5

config.mode की no-cors भाग पर:

कोई CORS - सिर से कुछ भी अन्य किया जा रहा से विधि रोकता है, GET या POST। यदि कोई सेवावर्कर्स इन अनुरोधों को रोकता है, तो वे इनके अलावा किसी भी शीर्षलेख को जोड़ या ओवरराइड नहीं कर सकते हैं। इसके अतिरिक्त, जावास्क्रिप्ट परिणामस्वरूप प्रतिक्रिया के किसी भी गुण तक नहीं पहुंच सकता है। यह सुनिश्चित करता है कि ServiceWorkers वेब के अर्थशास्त्र को प्रभावित नहीं करते हैं और डोमेन पर डेटा लीक करने से उत्पन्न होने वाली सुरक्षा और गोपनीयता समस्याओं को रोकते हैं।

प्रभावी ढंग से, प्रतिक्रिया आप (no-cors एक विधा के रूप में निर्दिष्ट के साथ) इस तरह का अनुरोध करने से मिलता है के बारे में अनुरोध सफल या असफल है कि क्या कोई जानकारी होगी, अपने fetch कॉल से स्थिति कोड 0. mode निकाला जा रहा है बनाने होगा दिखाओ कि वास्तव में सीओआरएस असफल रहा था।

यह जानने के लिए कि आपके विशेष मामले में 0 का क्या अर्थ है, अन्य SO उत्तरों से परामर्श लें।

+0

Thx, अगर मैं 'नो-कॉर्स' हटा देता हूं: – pingfengafei

+1

Thx, अगर मैं 'नो-कॉर्स' हटा देता हूं: प्रीफलाइट अनुरोध का जवाब एक्सेस नियंत्रण जांच पास नहीं करता है: नहीं 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन' हेडर मौजूद है अनुरोधित संसाधन। उत्पत्ति 'http: // localhost: 8888' इसलिए पहुंच की अनुमति नहीं है। यदि एक अपारदर्शी प्रतिक्रिया आपकी आवश्यकताओं को पूरा करती है, तो संसाधनों को सीओआरएस अक्षम के साथ संसाधन लाने के लिए 'नो-कॉर्स' पर सेट करें। सीओआरएस को कैसे हल करें? – pingfengafei

+0

यह सही है। सीओआरएस एक ब्राउज़र सुरक्षा सुविधा है जिसे पृष्ठ से ही अक्षम नहीं किया जा सकता है। यदि आप अपने पृष्ठों से अपने ब्राउज़र से अनुरोध करना चाहते हैं तो आपको baidu.com से संपर्क करना होगा। – Brian

0

मुझे नहीं पता कि ब्राउज़र वातावरण में ऐसा कैसे करें, लेकिन मुझे पता है कि यह fetch को नोड में क्रॉस-मूल साइट से कुछ उपलब्ध है।

require('es6-promise').polyfill(); 
require('isomorphic-fetch'); 
fetch('https://www.baidu.com', { 
    mode: 'no-cors' 
}) 
    .then((res) => { 
    console.log(res.status); //=> 200 
    }); 

तो, आप fetch आप क्या चाहते हैं और फिर respond अपने ग्राहक को करने के लिए एक नोड सर्वर का उपयोग कर सकते हैं।

मैं भी ब्राउज़र में कुछ साइटों से fetch कुछ करना चाहता हूं, जो असंभव प्रतीत होता है। शायद यह वास्तव में ऐसा करना असंभव है, क्योंकि इंटरनेट को उन वेबसाइटों की सुरक्षा करने की आवश्यकता है, जिनसे हम संसाधन प्राप्त करना चाहते हैं।

संबंधित मुद्दे