Вызов AJAX не возвращается - функция успеха не выполняется в Django - PullRequest
1 голос
/ 09 декабря 2011

Я делаю AJAX-вызовы с использованием jQuery в Django.Кажется, все работает нормально, за исключением того, что вызов ajax не возвращается, в результате чего функция успеха не выполняется.Это мой файл jquery

$.ajax({
          type: "POST",
          url: "/contact_us/",
          data: {
            'name': name_val,
            'email': email_val,
            'message': message_val,
            'subject': subject_val,
            'cc': cc_val,
          },
          success: function() 
          {

            // display success message and reset values in the form fields
            $("#reply-message").html('Your message has been sent!').fadeOut(3000, function() {});
            // clear the fields
            $("#contact-name").val("");
            $("#contact-email").val("");
            $("#contact-message").val("");
            $("#contact-subject").val("");


          }

        });

Я не знаю, что возвращать в представлении для вызова AJAX, поэтому сейчас я просто возвращаю фиктивное сообщение, но оно не работает.Вот views.py

def contact_us(request):
    if request.is_ajax():
        if request.method == 'POST':
            name = request.POST.get('name', False)
            email = request.POST.get('email', False)
            message = request.POST.get('message', False)
            subject = request.POST.get('subject', False)
            cc = request.POST.get('cc', False)

            recipients = ['abc@gmail.com']
            if cc:
                recipients.append(email)

            from django.core.mail import send_mail
            send_mail(subject, message, email, recipients)
            return_message = "Sent mail"
            return Httpresponse(return_message)

Возвращаемое сообщение пустое, я даже не хочу обрабатывать его в своем ответе.Но почему вызов ajax не возвращается, остальное все работает нормально, и я также получаю письмо.

Я только что понял, что допустил очень глупую ошибку, я написал Httpresponse, тогда как это должен быть HttpResponse.Теперь он работает абсолютно нормально

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Я не вижу никаких непосредственных проблем с вашим кодом. Если у вас есть Firebug, откройте вкладку «Сеть», и вы сможете увидеть полученный код ответа и проверить ответ. Вы должны получить «200 OK».

Другой вариант отладки - попробуйте ввести следующее:

$.ajax({
          type: "POST",
          url: "/contact_us/",
          data: {
            'name': name_val,
            'email': email_val,
            'message': message_val,
            'subject': subject_val,
            'cc': cc_val,
          },
          success: function() 
          {
            // display success message and reset values in the form fields
            $("#reply-message").html('Your message has been sent!').fadeOut(3000, function() {});
            // clear the fields
            $("#contact-name").val("");
            $("#contact-email").val("");
            $("#contact-message").val("");
            $("#contact-subject").val("");
          },
          error: function(jqXHR, textStatus, errorThrown) 
          {
              alert(errorThrown);
           }

        });

Это должно сказать вам, в чем проблема, если Ajax-вызов не удался.

0 голосов
/ 07 декабря 2013

Это немного поздно, но вот оно.

Передаете ли вы CSRF-токен с вашими запросами ajax?

Чтобы явно сделать это с каждым запросомдобавьте токен к данным, отправляемым на сервер

$.ajax({
...
data: {
...
csrfmiddlewaretoken: '{{ csrf_token }}',
...
},
...
});

Если вы хотите, чтобы токен отправлялся автоматически при каждом запросе, вам придется перепрыгивать через циклы, описанные в ссылке.

В любом случае, обязательно добавьте django.middleware.csrf.CsrfViewMiddleware к вам MIDDLEWARE_CLASSES список в вашем файле settings.py.

0 голосов
/ 09 декабря 2011

Причина, по которой ваша функция успеха не выполняется, возможно, потому, что вы не возвращаете действительный xml.jquery проверяет поступающие данные, чтобы определить, является ли их правильный формат, он же xml, потому что вы используете вызов ajax.

Переформатируйте ваши данные или переключитесь на другой вызов jquery.

изВеб-сайт jquery для вызова ajax.

success (data, textStatus, jqXHR) Функция, Массив Функция, вызываемая в случае успешного выполнения запроса.Функция получает три аргумента: данные, возвращаемые с сервера, отформатированные в соответствии с параметром dataType;строка, описывающая статус;и объект jqXHR (в jQuery 1.4.x, XMLHttpRequest).Начиная с jQuery 1.5, настройка успеха может принимать массив функций.Каждая функция будет вызываться по очереди.Это событие Ajax.

Изменить: Дополнительная информация с сайта jquery, проверьте ваш тип MIME для возврата:

Примечание: Мы должны убедиться, что тип MIMEвеб-сервер сообщает о нашем выборе dataType.В частности, XML должен быть объявлен сервером как text / xml или application / xml для согласованных результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...