timofeydeys
@timofeydeys
Свобода творцов

Почему выскакивает ошибка при ajax запросе?

Добрый вечер дорогие форумчане. Подскажите пожалуйста, почему при попытке отправить ajax запрос, у меня выскакивает alert из error??? Всю голову уже сломал, весь интернет уже перерыл.
2) И почему после того как я нажимаю ок в alert у меня перезагружается страница??

шаблон
{% extends "crm/main_struct.html" %}
{% load staticfiles %}

{% block content %}

<!--ОБЯЗАТЕЛЬНО СДЕЛАТЬ ФУНКЦИЮ НА JS КОТОРАЯ БУДЕТ ВЫЧИСЛЯТЬ ОТСТУПЫ И В НУЖНОЕ МЕСТО ПИХАТЬ КОНТЕНТ САЙТОВ-->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script>
$(document).ready(function() {
  $('ul.tabs_m_w').each(function() {
    $(this).find('li').each(function(i) {
      $(this).click(function() {
        $(this).addClass('active').siblings().removeClass('active');
        var p = $(this).parents('div.tabs_container_m_w');
        p.find('div.tab_container_m_w').hide();
        p.find('div.tab_container_m_w:eq(' + i + ')').show();
      });
    });
  });
})
</script>
<a href="{{url}}/crm/my_work/new/" class="add_notebook_a">
    <div class="add_notebook">Добавить</div>
</a>
<div class="tabs_container_m_w">
  <ul class="tabs_m_w">
      {% for notebook in notebookList %}
        <li class="inl-bl_m_w">
            <div class="m_w_list_head">{{notebook.name}}</div>
            <div class="m_w_list_date">{{notebook.date_firstly}}</div>
            <div class="m_w_list_kr_info">{{notebook.kr_info}}</div>
        </li>
      {% endfor %}
  </ul>

    {% for notebook in notebookList %}
  <div class="tab_container_m_w">
      <a href="" onclick="resend({{notebook.id}});" class="a_tab">
          <div class="m_w_save">
            Сохранить
          </div>
      </a>
    <div class="m_w_info_head" id="name{{notebook.id}}" contentEditable="true">{{notebook.name}}</div>
      <div class="m_w_info_info" id="info{{notebook.id}}" contentEditable="true">{{notebook.information}}</div>
  </div>
{% endfor %}

</div>

<script>
    function resend(pk){
           var name = document.getElementById('name' + pk).innerHTML.trim().replace(/<.*?>/g, "");
           var info = document.getElementById('info' + pk).innerHTML.trim().replace(/<.*?>/g, "");
           edit(name, info, pk);
    }
</script>

<script>
function edit(name, info, pk) {
// Если поля заполнены, отправляем их значения
        $.ajax({
            error: function() {
                alert('Ошибка получения запроса');
            },
    // При успехе очищаем поля и меняем кнопочку
                success: function(data) {
                 alert("Успех"); // для проверки, что скрипт работает
                },
    // CSRF механизм защиты Django
                beforeSend: function(xhr, settings) {
                    console.log('-------------before send--');
                    function getCookie(name) {
                        var cookieValue = null;
                        if (document.cookie && document.cookie != '') {
                            var cookies = document.cookie.split(';');
                            for (var i = 0; i < cookies.length; i++) {
                                var cookie = jQuery.trim(cookies[i]);
                                // Does this cookie string begin with the name we want?
                            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                break;
                            }
                        }
                    }
                    return cookieValue;
                    }
                    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                        // Only send the token to relative URLs i.e. locally.
                        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                    }
                }
            });// ajax


        return false;
    };
</script>
{% endblock %}


urls.py
urlpatterns = patterns('',
    url(r'^my_work/edit/$', views.NBEdit, name='crm_edit_NB'),
)


views.py
def NBEdit(request):
    if request.is_ajax():
        for i in MyDela.objects.filter(pk=request.POST.get("id", "")):
            i.name = request.POST.get("name", "")[:250]
            i.information = request.POST.get("info", "")
            i.save()
        #  return HttpResponse("ok")
        return HttpResponseRedirect('/crm/sites/')
    else:
        #  return HttpResponse("bad")
        return HttpResponseRedirect('/crm/zayvki/')


Прошу не кидаться помидорами, я только учусь кодить))
  • Вопрос задан
  • 4086 просмотров
Решения вопроса 1
У вашего ajax - запроса нет ютл куда обращаться за информацией, отсутствует тип запроса(это не критично), отсутствует data(информация которую отправляете) . Всю инфу которую отправляете и обрабатываете во вьюхе нужно укласть в data.

Пример
$.ajax({
            method: "POST",
            url: '/invite/',
            data: {
            'email': email.val(),
            'csrfmiddlewaretoken': CSRF_TOKEN,
            'language':lang
            },
            success: function(response, status) {
              alert(response['msg']);
              dialog.dialog( "close" );
                },
            error: function(response) {
              alert("Error");
              dialog.dialog( "close" );
            }
          });

Также можно вот это //CSRF механизм защиты Django сделать вот так
<script >var CSRF_TOKEN = "{{ csrf_token }}"</script>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
syschel
@syschel
freelance/python/django/backend
Что бы после клика не было перехода, нужно сделать "ретурн фолс" у функции клика. Что бы не было ошибки, нужно узнать что это за ошибка, а для этого посмотреть что отдаёт сервер и что он получает, в этом вам поможет firebug в фаерфокс или аналоги в других браузерах.
Ответ написан
Комментировать
@newpy
web-dev
Возвращаешь редирект, ожидаешь получить html... (dataType: html - означает что ты в ответ ждешь именно html). Получаешь редирект (код ответа сервера будет 304 вроде, а не 200), поэтому success и не выполняется скорей всего, выполняется error.

Просмотрел, не тот код выкинул)))

А еще совет грамотно формулировать вопросы, если хочешь получить ответы. А то из комментариев я так понял что и код не совсем тот выложен.

я редирект сделал, что бы понять, выполняется ли код во вьюхе или нет

Зачем тогда выкладываешь сюда такой код, которым ты что-то там проверяешь, и потом удивляешься что не работает?

Для начала убрал бы свои CSRF токены и сделал бы нормальный, простой ajax запрос, с нормальным ответом от сервера, вместо редиректов. Добился бы выполнения success. Поэтапно добавлял свою логику, и проверил бы на каком этапе и после добавления чего получаешь не тот результат который ожидаешь. Заодно научишься искать свои ошибки. Это будет полезнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы