2012-03-13 2 views
2

$ .ajax 대신 $ .ajaxSend라는 함수를 사용하여 AJAX 게시 요청을 보냅니다. 방금 JS 파일의 맨 아래에 ajaxSend 함수를 추가하면 원격 시스템에서 게시물 요청을 시도 할 때 403 금지되어 있지만 로컬 시스템이 작동합니다. https://docs.djangoproject.com/en/dev/ref/contrib/csrf/잡히지 않은 TypeError : 장방형으로부터 AJAX를 보낼 때 ajax를 전송하지 않습니다.

: 여기의 코드를 가지고

 $.ajax({ 
      ... do post stuff ... 
     }); 

$(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')); 
    } 
}); 

: 여기

Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method 'ajaxSend' 

같은 스크립트가 모습입니다 : 내가 AJAX 포스트 호출을 할 때 여기에 내가 오류입니다 이 지침에 따라 시도했지만 작동하지 않았습니다. error: "CSRF verification failed. Request aborted." when using jquery ajax with Django

+0

jquery의 어떤 버전을 사용하고 있습니까? –

+0

1.7.1을 사용하고 있습니다 : https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js – egidra

답변

0

.ajaxSend은 jQuery obj에 첨부되어야합니다. 요법 (예 : 장고의 예 : $(document) 개체에는 $ 자체가 아닙니다.). 이 함수 은 AJAX를 수행하는 데는이 아니지만 AJAX가 실행되기 전에 설정해야합니다. 따라서 첫 번째 줄에는 $.ajax({...});을 사용해야합니다 (Django 코드는 괜찮습니다). 자세한 내용은 the documentation을 참조하십시오.

실제 질문은 :이 코드가 어떻게 로컬에서 작동 할 수 있습니까? :)

+0

사용법에 대한 예를 들어 주시겠습니까? 나는 아직도 혼란 스럽다. 감사. – egidra

+0

JS 파일의 맨 아래에 ajaxSend 함수를 추가하면 원격 시스템에서 게시물 요청을 시도 할 때 403 금지되어 있지만 로컬 시스템이 작동합니다. – egidra

+1

'$ (document) .ajaxSend'를 시작할 때'$ (document) .ready (function() {$ .ajax ({{}});}; '. – freakish

관련 문제