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