我正在嘗試在返回json的Django應用程序和運行AJAX的客戶端之間進行跨站點通信。Django 1.9 + django-cors-headers + AJAX不工作
我使用django-cors-headers具有以下配置:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp.apps.MyAppConfig',
'corsheaders',
]
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True
現在我試圖讓所有的連接只是爲了讓測試。 這是我的看法:
def index(request):
if request.is_ajax:
results={}
results=["The password is valid"]
data_json=json.dumps(results)
mimetype="application/json"
return HttpResponse(data_json,mimetype)
我試圖與裝飾@csrf_exempt了。 最後,這是我的AJAX:
$.ajax({
url: "http://otherdomain.com/myapp/",
type: "POST",
crossDomain: true,
data :{
'username': $("#myName").val(),
},
dataType: "json",
success:function(result){
alert(JSON.stringify(result));
},
error:function(xhr,status,error){
alert(status);
}
});
控制檯提示中這樣的:
的XMLHttpRequest無法加載http://otherdomain.com/myapp/。請求的資源上沒有「Access-Control-Allow-Origin」標題。 Origin'thisdomain.com'因此不被允許訪問。
任何幫助將是有用的。非常感謝你。
你試過'dataType:「jsonp」'而不是'json'嗎? – valignatev
嗨@valentjedi感謝您的回答。我沒有嘗試jsonp,因爲在django-cors-headers文檔中有這樣的註釋:「雖然JSON-P很有用,但它嚴格限於GET請求。」 也許我不是很好理解,有可能使用POST和jsonp? –
啊我錯過了。不,這是不可能的。另外,如果你使用一些web服務器,比如apache或者nginx,你應該在那裏啓用cors,不僅僅在你的django應用中。檢查此:http://enable-cors.org/server.html – valignatev