2013-10-23 34 views
0

請檢查我是否使用下面的js來搜索內容。 這裏iam從name = csrfmiddlewaretoken獲取csrf標記。 請幫我在這在Django項目中通過Ajax發佈csrf令牌時丟失或不正確

$(function(){ 
    $('#search').keyup(function(){ 
     $.ajax({ 
      type: "POST", 
      url:"/article/search_title/", 
      data:{ 
       'search_text' : $('#search').val(), 
       'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val() 
      }, 
      success: searchSuccess, 
      dataType: 'html' 

     }); 

    }); 

}); 

function searchSuccess() { 
    $('search_success').html(data); 

} 
+0

你能顯示請求頭嗎? – mariodev

回答

0

通過添加下面的代碼我繞過CSRF令牌問題 感謝

$(document).ajaxSend(function(event, xhr, settings) { 
    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; 
    } 
    function sameOrigin(url) { 
     // url could be relative or scheme relative or absolute 
     var host = document.location.host; // host + port 
     var protocol = document.location.protocol; 
     var sr_origin = '//' + host; 
     var origin = protocol + sr_origin; 
     // Allow absolute or scheme relative URLs to same origin 
     return (url == origin || url.slice(0, origin.length + 1) == origin + '/') || 
      (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') || 
      // or any other URL that isn't scheme relative or absolute i.e relative. 
      !(/^(\/\/|http:|https:).*/.test(url)); 
    } 
    function safeMethod(method) { 
     return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
    } 

    if (!safeMethod(settings.type) && sameOrigin(settings.url)) { 
     xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 
    } 
}); 
0

剛剛從文檔https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

// 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'); 
相關問題