2011-10-21 10 views
5

इससे पहले कि आप कहते हैं कि वहाँ एक और पोस्ट (jQuery $.ajax(), $.post sending "OPTIONS" as REQUEST_METHOD in Firefox), हाँ, यह बिल्कुल मदद doens't है के बजाय विकल्प है, इसलिए ..अनुरोध विधि पोस्ट (मौजूदा StackExchange पद doens't मदद)

मैं क्रोम का उपयोग कर रहा देव नवीनतम संस्करण और जब मैं इस तरह एक दूरस्थ वीडियो कनवर्टर सेवा के एपीआई के लिए एक फ़ाइल भेजने का प्रयास करें, यह काम करता है (सब कुछ coffeescript में है) के लिए इस कोड 1 कहते हैं:

json_string = getNewSignedParams() 

    xhr = new XMLHttpRequest 
    xhr.open('POST', some_url, true) 
    xhr.setRequestHeader("Cache-Control", "no-cache") 
    xhr.setRequestHeader("Content-Type", "application/octet-stream") 
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest") 
    xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName) 
    xhr.setRequestHeader("X-Query-Params", json_string) 

    xhr.send some_file 

ऊपर रिटर्न एक 200 और बस काम करता है । लेकिन मेरे पास पृष्ठ पर jQuery है, इसलिए मैंने सोचा कि मैं इसका उपयोग करूंगा, इसलिए मेरे पास उपरोक्त का एक jQuery संस्करण है।

$.ajax 
    url: some_url 
    type: 'post' 
    data: some_file 
    processData: false 
    beforeSend: (xhr) -> 
     xhr.setRequestHeader("Cache-Control", "no-cache") 
     xhr.setRequestHeader("Content-Type", "application/octet-stream") 
     xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest") 
     xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName) 
     xhr.setRequestHeader("X-Query-Params", json_string) 
    success: -> 
     console.log 'success' 

मैं इस 400 (ख़राब अनुरोध) प्राप्त करते हुए कहा कि उत्पत्ति http://127.0.0.1:3000 पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति द्वारा अनुमति नहीं है: और के लिए इस कोड को 2 फोन करते हैं।

लेकिन यह प्राप्त करें, अगर मैं कोड 1 को अनदेखा करता हूं और कोड 2 को टिप्पणी करता हूं और पृष्ठ को रीफ्रेश करता हूं और एक फ़ाइल अपलोड करता हूं, जो सफल होगा, और कोड 1 और असंगत कोड 2 पर टिप्पणी करें और पृष्ठ को रीफ्रेश करें और फ़ाइल अपलोड करें, अब कोड 2 उस 400 खराब अनुरोध त्रुटि को फेंक नहीं देगा !!

लेकिन अगर मैं पूरा ब्राउज़र बंद करता हूं, और पेज 2 का उपयोग कर रहा हूं, तो फ़ाइल अपलोड करने से मुझे 400 त्रुटि मिल जाएगी, इससे कोई फर्क नहीं पड़ता कि मैं कितनी बार कोशिश करता हूं। तो अगर मैं पिछले पैराग्राफ का वर्णन करता हूं, तो कोड 2 काम करेगा!

और एक और बात, क्रोम कंसोल में नेटवर्क लॉग का कहना है कि कोड 2 के साथ किए गए अनुरोधों में अनुरोध विधि के रूप में "विकल्प" हैं। जबकि कोड 1 में, अनुरोध विधि "POST"

क्या किसी को पता है कि यहां क्या हो रहा है?

उत्तर

2

यह एक क्रॉस-साइट-स्क्रिप्टिंग समस्या प्रतीत होता है: यूआरएल वास्तव में समस्या हो सकती है। यूआरएल शायद स्क्रिप्ट की तुलना में एक अलग मेजबान पर है जो अनुरोध करता है। ब्राउज़र सुरक्षा कारणों से इसकी अनुमति नहीं देते हैं।

+0

फिर यह क्रॉस डोमेन –

+0

पर चलने के लिए कैसे एक सामान्य एक्सएचआर के साथ, यह संभव नहीं है। हालांकि आप अपने जेसन डेटा को स्क्रिप्ट टैग में लोड करने जैसे कुछ हैक्स कर सकते हैं (इसे हेड में जोड़ दें) और एक [JSONP] (http://en.wikipedia.org/wiki/JSONP) फ़ंक्शन कॉल करें। – Timo

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