P
Feb. 25, 2023, 12:24 a.m.

Не совсем корректно работает ajax

Добрый день! Вот код с использованием ajax для добавления и удаления записей в таблицу. Если открыть страницу с данными, то можно и удалять и добавлять... Но! после добавления не работает удаление... id значение становится ''. Но если обновить страницу все опять работает. Может, подскажите в чем причина?

  1. <script>
  2. output='';
  3.  
  4. $('#post-form').on('submit',function(e){
  5. event.preventDefault();
  6. var self = this;
  7. let _tlt=$("#idtitle").val();
  8.  
  9. let csr=$("input[name=csrfmiddlewaretoken]").val();
  10. console.log($(this).attr('action'))
  11. mydata={
  12. title:_tlt,
  13. csrfmiddlewaretoken:csr,
  14. }
  15.  
  16. $.ajax({
  17. url:$(this).attr('action'),
  18. method:"POST",
  19. data:mydata,
  20. dataType:"json",
  21.  
  22. success:function(data){
  23. x=data.unit_data;
  24. if (data.status=='Save'){
  25. for(i=0;i<x.length;i++){
  26. output +='<tr><td class="align-middle" style="width:960px;">'+ x[i].title+'</td>'+
  27. '<td class="text-center align-middle">'+'<input data-sid="{{item.pk}}" value="Update" type="image" src="../static/images/update.png" style="width:25px;">'+'</td>'
  28. +
  29. '<td class="text-center align-middle">'+'<input data-sid="{{item.pk}}" data-del="SprDelete" class="btn-del" value="Delete" type="image" src="../static/images/del.png" style="width:28px;">'+'</td></tr>'
  30. }
  31.  
  32. $('#tbody').html(output)
  33. output='';
  34. $("form")[0].reset();
  35. //location.reload();
  36. }
  37. if (data.status == 0){
  38. alert('Запись не добавлена. Возможно, такая уже есть в справочнике...');
  39. }
  40. }
  41. });
  42. }
  43. );
  44. ///////////////////////////////////////////////////////////////////////////////
  45. /////////////////////////////Delete SPR
  46. $('#tbody').on('click','.btn-del',function(){
  47. let id=$(this).attr('data-sid');
  48. alert(id);
  49. let pth='/'+$(this).attr('data-del')+'/';
  50. let csr=$("input[name=csrfmiddlewaretoken]").val();
  51.  
  52. mydata={sid:id, csrfmiddlewaretoken:csr,};
  53. mythis=$(this);
  54. $.ajax({
  55. url:pth,
  56. method:'POST',
  57. data:mydata,
  58. success:function(data){
  59. if(data.status =='Del'){
  60. $(mythis).closest("tr").fadeOut();
  61.  
  62. }
  63.  
  64. if(data.status ==0){
  65. console.log('NO');
  66. }
  67. },
  68. });
  69.  
  70. });
  71.  
  72. </script>
3

Do you like it? Share on social networks!

6
P
  • Feb. 25, 2023, 7:40 a.m.

И если после добавления посмотреть код страницы, то там ничего не изменится. Меняется только после обновления страницы... Может, в этом причина? Что тут можно сделать? Спасибо!

  1. <table class="table shadow table-bordered">
  2. <tbody id="tbody">
  3.  
  4. <tr>
  5. <td style="width:960px; " class="align-middle">Новая</td>
  6.  
  7. <td class="text-center align-middle" ><input data-sid="219" value="Update" type="image" src="/static/images/update.png" width="25px" > </td>
  8. <td class="text-center align-middle" ><input data-sid="219" data-del="SprDelete" class="btn-del " value="Delete" type="image" src="/static/images/del.png" width="28px"> </td>
  9. </tr>
  10.  
  11. <tr>
  12. <td style="width:960px; " class="align-middle">Новая запись</td>
  13.  
  14. <td class="text-center align-middle" ><input data-sid="218" value="Update" type="image" src="/static/images/update.png" width="25px" > </td>
  15. <td class="text-center align-middle" ><input data-sid="218" data-del="SprDelete" class="btn-del " value="Delete" type="image" src="/static/images/del.png" width="28px"> </td>
  16. </tr>
  17.  
  18. <tr>
  19. <td style="width:960px; " class="align-middle">кг</td>
  20.  
  21. <td class="text-center align-middle" ><input data-sid="53" value="Update" type="image" src="/static/images/update.png" width="25px" > </td>
  22. <td class="text-center align-middle" ><input data-sid="53" data-del="SprDelete" class="btn-del " value="Delete" type="image" src="/static/images/del.png" width="28px"> </td>
  23. </tr>
  24.  
  25. <tr>
  26. <td style="width:960px; " class="align-middle">л.</td>
  27.  
  28. <td class="text-center align-middle" ><input data-sid="49" value="Update" type="image" src="/static/images/update.png" width="25px" > </td>
  29. <td class="text-center align-middle" ><input data-sid="49" data-del="SprDelete" class="btn-del " value="Delete" type="image" src="/static/images/del.png" width="28px"> </td>
  30. </tr>
  31.  
  32. <tr>
  33. <td style="width:960px; " class="align-middle">м</td>
  34.  
  35. <td class="text-center align-middle" ><input data-sid="2" value="Update" type="image" src="/static/images/update.png" width="25px" > </td>
  36. <td class="text-center align-middle" ><input data-sid="2" data-del="SprDelete" class="btn-del " value="Delete" type="image" src="/static/images/del.png" width="28px"> </td>
  37. </tr>
  38.  
    P
    • Feb. 25, 2023, 11:53 a.m.

    Хотя ошибка скорее всего во view, вот что пишет:
    ValueError: Field 'id' expected a number but got ''.
    [25/Feb/2023 12:44:04] "POST /SprDelete/ HTTP/1.1" 500 121525
    Понятно, id ждет число , а получает пустую строку. Но почему так? Вот сам view

    1. #***********************//AJAX//**********************************************
    2. # удаление единицы измерения
    3. def SprDelete(request):
    4. if request.method == 'POST':
    5. id=request.POST.get('sid')
    6. print(id)
    7. pi=Unit.objects.get(pk=id)
    8. pi.delete()
    9. return JsonResponse({'status':'Del',})
    10. else:
    11. return JsonResponse({'status':0,})
    12.  

    Если просто открыть спраочник, то все отлично работает. Но если добавить, а потом попробовать что-то удалить, то вот эта ошибка, пустая строка в id..

      P
      • Feb. 25, 2023, 7:28 p.m.
      • (edited)

      если добавить в JavaScript location.reload () - все будет работать. но зачем мне перезагружать страницу? ч от этого и хочу уйти:(

        P
        • Feb. 26, 2023, 2:28 p.m.

        Вопрос закрыт. Разобрался..

          NSProject
          • Feb. 26, 2023, 6:20 p.m.
          • (edited)

          Всё логично. Ты полностью стираешь форму делая form[0].reset() и она становится пустой. То есть данных никаких нет.

            P
            • Feb. 26, 2023, 6:23 p.m.

            А всё, разобрался...

              Comments

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Last comments
              • Evgenii Legotckoi
                March 9, 2025, 9:02 p.m.
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                March 9, 2025, 4:14 p.m.
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
              • ИМ
                Nov. 22, 2024, 9:51 p.m.
                Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
              • Evgenii Legotckoi
                Oct. 31, 2024, 11:37 p.m.
                Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
              • A
                Oct. 19, 2024, 5:19 p.m.
                Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html