2015-06-01 6 views
13

इसलिए मैं अपनी साइट पर फ़ाइल अपलोड पर प्रगति पट्टी पाने का प्रयास कर रहा हूं। मैं बस संसाधनविकल्प 405 (विधि अनुमत नहीं है)

$.ajax({ 
    url: $rootScope.URL, //Server script to process data 
    type: 'POST', 
    beforeSend: beforeSendHandler, 
    success: completeHandler, 
    error: errorHandler, 
    data: formData, 
    cache: false, 
    contentType: false, 
    processData: false 
}); 

अपलोड करते हैं यह पूरी तरह से काम करता है, लेकिन अगर मैं घटना को जोड़ने के लिए प्रगति को सुनने के लिए:

$.ajax({ 
    url: $rootScope.URL, //Server script to process data 
    type: 'POST', 
    xhr: function() { // Custom XMLHttpRequest 
     var myXhr = $.ajaxSettings.xhr(); 
     if(myXhr.upload){ // Check if upload property exists 
      myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // For handling the progress of the upload 
     } 
     return myXhr; 
    }, 
    beforeSend: beforeSendHandler, 
    success: completeHandler, 
    error: errorHandler, 
    data: formData, 
    cache: false, 
    contentType: false, 
    processData: false 
}); 

मैं:

OPTIONS myserver.com/controller/filtercontroller.php? 405 (Method Not Allowed) 
    jQuery.ajaxTransport.send 
    jQuery.extend.ajax  
    (anonymous function) 
    jQuery.event.dispatch 
    jQuery.event.add.elemData.handle 
XMLHttpRequest cannot load myserver.com/controller/filtercontroller.php?. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. The response had HTTP status code 405. 

तो स्पष्ट रूप से अपने सर्वर नहीं करता है Access-Control-Allow-Origin और OPTIONS सही नहीं है? लेकिन filtercontroller.php के शीर्ष 2 पंक्तियां हैं:

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); 

मैं कई अलग अलग समाधान की कोशिश की है और कोई भी मेरे लिए काम किया है। एक बार उत्पादन ब्राउज़र header() को भेजा जाता है वास्तव में एक PHP चेतावनी जो यदि आप नहीं देख रहे हैं प्रदर्शित किया जा रहा नहीं कर रहा है या ट्रैक फेंक होगा

+0

एक्सेस-कंट्रोल-स्वीकृति-हेडर सर्वर/क्लाइंट कार्यान्वयन के आधार पर स्वीकार किए गए मान के रूप में अनुमति नहीं दे सकते हैं - http://stackoverflow.com/a/8719346/2155068 – MjrKusanagi

+2

405 आमतौर पर वेब सर्वर द्वारा जारी किया जाता है । तो आप अपने वेब सर्वर की कॉन्फ़िगरेशन की जांच कर सकते हैं। –

+0

@MjrKusanagi जो इस मामले में अप्रासंगिक है - एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: * एक स्वीकार्य मूल्य है। – DIMMSum

उत्तर

3

तो, सबसे पहले मुझे नहीं लगता कि इसका आपके सीओआरएस कॉन्फ़िगरेशन के साथ कुछ भी करना है, क्योंकि यह अलग-अलग त्रुटियों को आउटपुट करेगा। क्या त्रुटि आप Azure/आईआईएस के संदर्भ में प्राप्त कर रहे हैं पैदा कर सकता है में देख मैं निम्नलिखित संभावनाओं पाया:

  • आप अपने web.config फ़ाइल में एक स्पष्ट <remove name="OPTIONSVerbHandler" /> हो सकता है। (यह कुछ मामलों में डिफ़ॉल्ट है)।
  • WebDAV मॉड्यूल interfering है और आप <remove name="WebDAVModule"/>

अन्त में मैं सिर्फ this answer जो कुछ अलग समाधान है जहां आप अपने PHP फ़ाइल में CORS हेडर निर्धारित नहीं करते पेश कर सकती है पाया जोड़ना चाहिए, लेकिन इसके बजाय उन्हें सर्वर में सेट विन्यास।

+0

आपको बहुत बहुत धन्यवाद। निकालने वाले नाम को बदलने से 405 त्रुटि हल हुई, लेकिन एक्सेस-कंट्रोल-ब्लाह-ब्लाह त्रुटि नहीं, जिसे आपके द्वारा प्रदान किए गए लिंक का पालन करके और कस्टम हेडर में जोड़कर हल किया गया था। अपने बक्षीस का आनंद लें। – user3194367

0

header(), किसी भी उत्पादन ब्राउज़र में भेजने से पहले रखा जाना चाहिए।

वैकल्पिक रूप से आप इसे .htaccess के माध्यम से भी कर सकते हैं जिसे आपकी किसी भी PHP स्क्रिप्ट से पहले संसाधित किया जाएगा। यह अनुमान है कि आप अपने वेबसर्वर के लिए अपाचे का उपयोग कर रहे हैं।

Header set Access-Control-Allow-Origin "*" 
# below line shouldn't be needed as by default all of those are allowed, 
# if you were doing PUT, TRACE, DELETE, etc then you would need it 
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" 
+0

शीर्षलेख कोड की पहली पंक्तियां हैं: user3194367

+0

क्या आपने .htaccess विधि को आजमाया था? – Augwa

+0

सर्वर अपाचे नहीं चला रहा है। – user3194367

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