2011-10-04 23 views
8

मैं काम करने के लिए AJAX प्राप्त करने की कोशिश कर रहा हूं, लेकिन मुझे 403 त्रुटि मिल रही है। मैं jquery के लिए काफी नया हूँ।Django jquery AJAX 403 त्रुटि

निम्नलिखित मेरी कोड

$('#prod_search_button').click(function(){ 
    if ($('#inv_prod_list').length) { 
     //insert a new record 
    } 
    else 
    { 
     //create the #inv_prod_list table and insert first record 
     var inv_table= '<table id="inv_prod_list" style="border: 2px solid #dddddd;"></table>'; 

     // create query object 
     var prod_query = { 
      query: jQuery.trim($('#id_prod_query').val()) 
     }; 

     // convert object to JSON data 
     var jsonQuery = JSON.stringify(prod_query); 

     $.ajax({ 
      type: 'POST', 
      url: '/company/product/item_search.json/', 
      data: jsonQuery, 

      success: function(jsonData){ 
        var parsed = JSON.parse(jsonData); 
        $('#inv_prod_wrap').html(inv_table); 

        var new_record = 'this is html for new row' 

        $('#inv_prod_list tr:last').after(new_record); 



        //off rows alt color 
        } 
     }); 
    } 
}); 
+0

उपयोग Firebug (एक Firefox विस्तार) (या किसी अन्य Javascript कंसोल) में शामिल देखने के लिए 403 के पीछे का कारण है । आप Django त्रुटि पृष्ठ (सीएसआरएफ टोकन के बारे में उपयोगी संकेत के साथ) देखेंगे। – LaundroMat

+0

http://stackoverflow.com/a/30210391/940098 – Wtower

उत्तर

20

मुझे लगता है कि आप don't pass CSRF token हैं।

+1

हाँ यह वास्तव में समस्या है, धन्यवाद! मुझे बस इतना करना था कि आधिकारिक दस्तावेज़ों से कोड का टुकड़ा जेएस फ़ाइल में कॉपी करें और इसे मेरे एचटीएमएल में शामिल करें। –

0

the HTTP/1.1 Status Code Definitions देखें है। "403" स्थिति कोड "निषिद्ध" है। यह आपके $.ajax अनुरोध के सर्वर पक्ष पर फेंकने में एक त्रुटि है, क्लाइंट पक्ष नहीं (यानी आपका कोड अनुरोध कर रहा है, लेकिन सर्वर से प्रतिक्रिया एक त्रुटि संदेश है)।

दस्तावेज़ इंगित करता है सर्वर केवल विशिष्ट स्थितियों में उस त्रुटि के साथ जवाब देना चाहिए:

सर्वर ने अनुरोध समझ, लेकिन यह पूरा करने से इंकार कर रहा है। प्रमाणीकरण मदद नहीं करेगा और अनुरोध दोहराया नहीं जाना चाहिए। अगर अनुरोध विधि HEAD नहीं थी और सर्वर सार्वजनिक करना चाहता है कि अनुरोध पूरा क्यों नहीं हुआ है, तो उसे इकाई में इनकार करने के कारण का वर्णन करना चाहिए। यदि सर्वर क्लाइंट को यह जानकारी उपलब्ध नहीं करना चाहता है, तो स्थिति कोड 404 (नहीं मिला) इसके बजाय उपयोग किया जा सकता है।

आमतौर पर, इस प्रकार की एक त्रुटि का अर्थ है कि जो भी उपयोगकर्ता आप लॉग इन हैं, उस यूआरएल तक पहुंच नहीं है जिस पर आप अनुरोध कर रहे हैं। अक्सर, यह इंगित करता है कि आपके कोड में एकमात्र त्रुटि वह यूआरएल है जिसे आप अनुरोध कर रहे हैं या कॉल के अनुक्रम का क्रम (उदाहरण के लिए आप लॉग इन करने से पहले डेटा का अनुरोध करने का प्रयास कर रहे हैं)। कम आम तौर पर, सर्वर पर मौजूद फाइलें/मौजूद नहीं होने के बारे में जानकारी लीक करने से बचने के लिए सभी "अमान्य" अनुरोधों के लिए 404 (नहीं मिला) त्रुटि कोड के बजाय 403 त्रुटि कोडों के बजाय 403 त्रुटि कोडों के जवाब देने के लिए कुछ वेब सर्वर और वेब अनुप्रयोगों को कॉन्फ़िगर किया गया है।

+0

जो समस्या नहीं है। मैंने सभी उपयोगकर्ता सत्यापन आवश्यकताओं को हटाने का प्रयास किया है और यह अभी भी वही त्रुटि फेंकता है। –

0

मैं इसमें भाग गया और लगा कि मैं क्या पोस्ट कर रहा था पोस्ट करूंगा। मेरे पास कैश किए गए पेज में {% CSRF_TOKEN %} था और यह वहां रखे हुए कैशिंग को कैच कर रहा था। तो कुछ उपयोगकर्ताओं के लिए यह वैध था और कुछ यह कैश के आधार पर नहीं था! यह ट्रैक करने के लिए एक दुःस्वप्न था, भले ही यह स्पष्ट होना चाहिए ... तो अपने कैशिंग की जांच करें।

1

आप अपनी विधि परिभाषा से पहले निम्नलिखित एनोटेशन जोड़कर सीएसआरएफ से बच सकते हैं।

from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
def Method(): 
0

यह भी जांच सकता है कि csrf मिडलवेयर सेटिंग.py में सक्षम है या इसे अक्षम करें। 'django.middleware.csrf.CsrfViewMiddleware' के लिए देखो।

1

सिर्फ नकल है कि एक js फ़ाइल में the official docs से कोड का टुकड़ा और अपने html

// using jQuery 
function getCookie(name) { 
    var cookieValue = null; 
    if (document.cookie && document.cookie !== '') { 
     var cookies = document.cookie.split(';'); 
     for (var i = 0; i < cookies.length; i++) { 
      var cookie = jQuery.trim(cookies[i]); 
      // Does this cookie string begin with the name we want? 
      if (cookie.substring(0, name.length + 1) === (name + '=')) { 
       cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
       break; 
      } 
     } 
    } 
    return cookieValue; 
} 
var csrftoken = getCookie('csrftoken'); 
function csrfSafeMethod(method) { 
    // these HTTP methods do not require CSRF protection 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
} 
$.ajaxSetup({ 
    beforeSend: function(xhr, settings) { 
     if (!csrfSafeMethod(settings.type) && !this.crossDomain) { 
      xhr.setRequestHeader("X-CSRFToken", csrftoken); 
     } 
    } 
}); 
संबंधित मुद्दे