405从ajax得到 - 怀疑csrf的东西行为不端

时间:2013-11-20 12:37:12

标签: javascript django jquery django-csrf http-status-code-405

我有一些看起来像的JavaScript:

$(document).ready(function() {
    var csrftoken = getCookie();
    $.ajaxSetup({      
        cache       : false,    
        data        : null,      
        beforeSend  : function(xhr, settings) {
            if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
        }

    });
}); 

我有一些看起来像的JavaScript:

jQuery.ajax({
    external : true,
    type     : "GET",
    url      : url,
    datatype : "json",
    async    : true,
    error    : function( jqxhr, textStatus, errorThrown ) {
        alert("error");
        console.log(url);
        console.log(jqxhr);
        console.log(textStatus);
        console.log(errorThrown);
    },
    success  : function(data) {
        if (data.status == "OK") {
            // do stuff;
        } else {
            alert("Error: Google Directions API returned the status code " + data.status);
        }
    }   
});

url是外部网址。它向Google Directions询问了一些方向。如果我只是用我的浏览器去那里,我会得到一些不错的json。

但如果上面的代码执行,我得到405和以下消息"Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin"

我安装了'django.middleware.csrf.CsrfViewMiddleware'

我正在做很多谷歌搜索,以找出如何解决这个问题,但到目前为止我找不到问题。

我的问题是:我如何让它发挥作用?

在此期间我会继续寻找答案......

我试过的东西(各种组合):

  • jsonp而不是json
  • crossDomain: true

我已经确认没有为违规网址

调用行xhr.setRequestHeader("X-CSRFToken", csrftoken);

1 个答案:

答案 0 :(得分:0)

检查您的设置文件中是否有正确的值,例如:

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = ('127.0.0.1:8000', )