Я вызываю представление Django с кросс-доменами AJAX.Я возвращаю правильные заголовки разрешающего источника CORS (работает в других вызовах ajax для моего API), однако мой ответ AJAX все еще не работает с ошибкой консоли браузера:
"Доступ к XMLHttpRequest в" foo "из источника 'bar' был заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок 'Access-Control-Allow-Origin'. "
В моей консоли python ответ такой, как и ожидалось: {"successMessage ":" Отправлено реферальное сообщение "," Access-Control-Allow-Origin ":" * "," Access-Control-Allow-Methods ":" POST "," Access-Control-Allow-Headers ":" * ", "Access-Control-Max-Age": "1000"}, но по какой-то причине это не переводится в AJAX и не работает.
Если я удаляю преобразование json и просто возвращаю HttpResponse (), я получаю статус 200 от AJAX и никаких предупреждений CORS, но все равно не получается.Я предполагаю, потому что он ожидает JSON, а это не то, что он получает.
Помогите!
Мой ajax:
$.ajax({
url: "http://192.168.0.23:8000/api/SendEmail?email=" + $("#refereeEmail").val()
+ "&refereeName=" + $("#refereeName").val()
+ "&referrerName=" + $("#referrerName").val(),
dataType: "json"
}).fail(function (xhr, status, error) {
console.log("fail");
$('#email-alert').text("There was an error communicating with the server. Please try again.");
$('#email-alert').show();
// handle a non-successful response
console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
}).success(function (response) {
if (response.status == "ok") {
console.log("worked");
// sent email, reload the page
// window.location.reload();
} else if (response.status == "error") {
var err = "Response status is error.";
console.log(err);
$('#email-alert').text(err);
$('#email-alert').show();
}
else {
// No status in response page
console.log("no status");
$('#email-alert').text("There was an error communicating with the server. Please try again.");
$('#email-alert').show();
}
});
My Django:
def SendEmail(request):
response = {}
referrer_name = request.GET.get("referrerName")
referee_email = request.GET.get("email")
referee_name = request.GET.get("refereeName")
user = None
if referee_email:
try:
referee_email = util.validate_email_with_mx_record_check(referee_email)
except ValidationError:
response["errorMessage"] = "Invalid email."
title = "FOO"
templateVars = [{'name': 'referrerName', 'content': referrer_name},
{'name': 'refereeName', 'content': referee_name}]
try:
user = User.objects.get(email__iexact=referee_email)
except:
user = util.CreateUser(referee_email, None, None, None)
if user:
if core.util.send_transactional_email("email-template", title, user, templateVars):
print "sent email"
response['successMessage'] = "Sent referral email"
else:
print "failed to send"
logger.error("Failed to send api email to %s" % referee_email)
response['errorMessage'] = "Failed to send api email"
else:
response['errorMessage'] = "Missing email"
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "POST"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "*"
return HttpResponse(json.dumps(response), content_type="application/json")