AJAX не читает заголовки разрешенного происхождения json CORS, возвращенные из django - PullRequest
0 голосов
/ 24 сентября 2019

Я вызываю представление 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...