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

Django + Ajax. Правильно ли составлен запрос?

Добрый день уважаемые форумчане. Прошу помидорами не кидать, только учусь. Проблема с ajax запросами. Точнее, как я понимаю они теряются или не туда уходят. Т.к. при успехе у меня JS перезагружает страницу, она перезагружается, т.е. скрипт выполняется и отправляет. А вот запись в БД не изменяется.
CRM мое приложение по адресу {{url}}/crm лежит. И в нем уже есть подвкладки, т.е. {{url}}/crm/my_work это путь вкладки, которую я скинул сюда. Объясните пожалуйста что к чему, и с полным примером кода или исправлением моего пожалуйста, что бы мне разобраться. Прикрепляю код:
views.py
def NBEdit(request):
    if request.method == "POST" and request.is_ajax():
        MD = MyDela(
            pk=request.POST.post("id", ""),
            name=request.POST.post("name", "")[:250],
            information=request.POST.post("info", "")
        )
        MD.save()
        return HttpResponse("ok")
    else:
        return HttpResponse("bad")


models.py
class MyDela(models.Model):
    name = models.CharField(max_length=250)
    kr_info = models.CharField(max_length=300)
    date_firstly = models.DateTimeField(auto_now_add=True)
    date_edit = models.DateTimeField(auto_now=True)
    information = models.TextField()
    status = models.IntegerField()
    user = models.ForeignKey(User)


urls.py моего приложения, НЕ ПРОЕКТА ЦЕЛИКОМ
urlpatterns = patterns('',
    # ex: /cab Klients/
    url(r'^$', views.main, name='crm_main'),
    url(r'^my_work/new', views.ValidLoginMain, name='crm_new_NB'),
    url(r'^my_work/newNB/', views.NBEdit, name='crm_NBEdit'),
)


n_b_new.html
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <div class="new_notebook">
        <form method="POST">
        {% csrf_token %}
            <div class="new_head_notebook" id="name" contentEditable="true">
                {{MD.name}}
            </div>
            <div class="save"><input id="save" type="button" value="Сохранить" onclick = "zapros();"/></div>
            <div class="new_information_notebook" id="information" contentEditable="true">
                {{MD.information}}
            </div>
            <div style="display:none" id="pk">{{MD.id}}</div>
        </form>
    </div>


    <script>
function zapros() {
//
    var name = document.getElementById("name").innerHTML;
    var info = document.getElementById("information").innerHTML;
    var id = document.getElementById("pk").innerHTML;
//
// Если поля заполнены, отправляем их значения
    if (true) {
        $.ajax({
            url: "{{url}}/crm/my_work/newNB/",
            type: 'POST',
            dataType:"html",
            data: {
                "name": name,
                "info": info,
                "id": id,
            },
            error: function() {
                alert('Ошибка получения запроса');
            },
// При успехе очищаем поля и меняем кнопочку
            success: function(data) {
             location.reload(); // для проверки, что скрипт работает
            },
// 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>
  • Вопрос задан
  • 408 просмотров
Пригласить эксперта
Ответы на вопрос 1
pinkevich
@pinkevich
Developer
Поменять во вьюхе request.POST.post("id", "") на request.POST.get("id", "") (и для всех остальных так же)
Ответ написан
Ваш ответ на вопрос

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

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