Php не работает с ajax post

У меня есть модальная форма:

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  Add user
</button>
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <form action="" method="post" id="saveperson">
            <label for="newcat">Project Name</label>
            <input type="text" name="newcat" value="">
            <label for="description">Description</label>
            <input type="text" name="description" value="">
            <input type="submit" name="user" value="Submit">
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

При отправке я запускаю js:

$(document).ready(function() {
    $('#saveperson').submit(function(event) { //Trigger on form submit
      var postForm = { //Fetch form data
        'name'     : $('input[name=newcat]').val(),
        'desc'     : $('input[name=description]').val() //Store name fields value
      };
      $.ajax({ //Process the form using $.ajax()
        type      : 'POST', //Method type
        url       : 'process.php', 
        data      : postForm, //Forms name
        dataType  : 'json',
        success   : function(data) {
            $('.modal-body').html("Done!");
          }
          else {
            $('.modal-body').html("Error!"); 
          }
        }
      });
      event.preventDefault(); 
    });
});

И тогда это должно работать в process.php

<?php 
    header ( "Content-Type: application/json");
    $cat_ID = get_cat_ID( sanitize_title_for_query($_POST['newcat']) );  
    // Check if category exists
    if($cat_ID == 0) {
        $cat_name = sanitize_text_field($_POST['newcat']);  
        $cat_desc = sanitize_text_field($_POST['description']);
        $cat_slug = sanitize_title_with_dashes($cat_name);
        $my_cat = array(
            'cat_name' => $cat_name, 
            'category_description' => $cat_desc, 
            'category_nicename' => $cat_slug, 
            'category_parent' => 0
        );
        if( wp_insert_category( $my_cat ) ) {
            // Category added successfully
            die ( json_encode ( array ( "success" => 1)));
        } else {
            // Error while creating new category
            die ( json_encode ( array ( "success" => 0)));
        }
    } else {
        // That category already exists
        die ( json_encode ( array ( "success" => 0)));
    }
?>

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

<?php 
    header ( "Content-Type: application/json");
    if( isset( $_POST['user'] ) ) {
        if( !empty( $_REQUEST['newcat'] ) ) {
            $cat_ID = get_cat_ID( sanitize_title_for_query($_POST['newcat']) );  
            // Check if category exists
            if($cat_ID == 0) {
                $cat_name = sanitize_text_field($_POST['newcat']);  
                $cat_desc = sanitize_text_field($_POST['description']);
                $cat_slug = sanitize_title_with_dashes($cat_name);
                $my_cat = array(
                    'cat_name' => $cat_name, 
                    'category_description' => $cat_desc, 
                    'category_nicename' => $cat_slug, 
                    'category_parent' => 0
                );
                wp_insert_category( $my_cat );
            }
        }
    }
?>

он переходит в состояние // That category already exists?

Natsathorn 26.10.2018 06:38

Вам необходимо сериализовать данные перед публикацией, см. Здесь stackoverflow.com/questions/6323338/…

XTOTHEL 26.10.2018 06:39

Вы проверили, что все ответы приходят на вашу функцию php?

DPS 26.10.2018 06:45

@DPS должна быть какая-то ошибка с php, получающим данные, он не работает. Если я запускаю только php на одной странице, он работает и сохраняет данные. Итак, проблема в том, что js отправляет данные и запускает php, но я не могу понять, где

rob.m 26.10.2018 06:46

@Natsathorn должна быть какая-то ошибка с php, получающим данные, он не работает. Если я запускаю только php на одной странице, он работает и сохраняет данные. Итак, проблема в том, что js отправляет данные и запускает php, но я не могу понять, где

rob.m 26.10.2018 06:47

@ rob.m Полагаю, вы используете стандартные функции Wordpress в основном файле PHP. Это могло быть причиной того, что php не выполняется.

CodeThing 26.10.2018 06:57

@CodeThing ммм, это могло быть .. подумал, что могу запустить wp_insert_category (); из одного файла php вне ядра wp

rob.m 26.10.2018 06:58
0
7
75
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ошибка в консоли браузера:

$(document).ready(function() {
    $('#saveperson').submit(function(event) { //Trigger on form submit
      var postForm = { //Fetch form data
        'name'     : $('input[name=newcat]').val(),
        'desc'     : $('input[name=description]').val() //Store name fields value
      };
      $.ajax({ //Process the form using $.ajax()
        type      : 'POST', //Method type
        url       : 'process.php', 
        data      : postForm, //Forms name
        dataType  : 'json',
        success   : function(data) {
            $('.modal-body').html("Done!");
          }
          else {
            $('.modal-body').html("Error!"); 
          }
        }
      });
      event.preventDefault(); 
    });
});

Обратите внимание на

          else {
            $('.modal-body').html("Error!"); 
          }

Ошибка:

Uncaught SyntaxError: Unexpected token else

Удалите блок else, он должен работать

Должен быть:

$(document).ready(function() {
    $('#saveperson').submit(function(event) { //Trigger on form submit
      var postForm = { //Fetch form data
        'name'     : $('input[name=newcat]').val(),
        'desc'     : $('input[name=description]').val() //Store name fields value
      };
      $.ajax({ //Process the form using $.ajax()
        type      : 'POST', //Method type
        url       : 'process.php', 
        data      : postForm, //Forms name
        dataType  : 'json',
        success   : function(data) {
            $('.modal-body').html("Done!");
          }
      });
      event.preventDefault(); 
    });
});

Вот рабочий пример

Я удалил его, и он не запускает php, данные не сохраняются в db

rob.m 26.10.2018 06:43

Вы проверили консоль браузера, там есть дополнительная скобка

Aditya Sharma 26.10.2018 06:45

консоль в порядке после удаления того бит, который вы сказали. Проблема заключается в том, что php не работает

rob.m 26.10.2018 06:45

да, проблема не в том, чтобы заставить работать ответ ajax. Проблема в php

rob.m 26.10.2018 06:51

Я думаю, вы передаете name и desc в качестве параметра, ожидая newcat и description в php

Aditya Sharma 26.10.2018 06:54

наверное, что я мог сделать?

rob.m 26.10.2018 06:55

Позвольте нам продолжить обсуждение в чате.

Aditya Sharma 26.10.2018 06:56

Вы пробовали это?

 $( "#saveperson" ).submit(function( event ) {
       let form = $( this );

      let formData = new FormData(form[0]);

     $.ajax({ //Process the form using $.ajax()
        type      : 'POST', //Method type
        url       : 'process.php', 
        data      : formData, 
        success   : function(data) {
            $('.modal-body').html("Done!");
          }
      });
      event.preventDefault();

  });

вы подаете в суд, проблема не в том, как я установил php для получения данных из js?

rob.m 26.10.2018 06:55
Ответ принят как подходящий

Проблема заключалась в том, что я запускал стандартные функции wordpress из внешнего файла php, и он не работал. Чтобы добиться того, что я делал, мне пришлось использовать

function.php and wordpress ajax

  add_action( 'wp_footer', 'ajax_Person' );

  function ajax_Person() { ?>
    <script type="text/javascript">
    jQuery("#createCat").on("click", function(e){
      e.preventDefault();
      person();
    });
    function person(){
      jQuery.ajax({
        url: '<?php echo admin_url('admin-ajax.php'); ?>',
        type: 'post',
        data: { action: 'data_person', catName: jQuery('#newCat').val(), catDesc: jQuery('#descRiption').val() },
        success: function(data) {

        }
      });
    }
    </script>
  <?php }

  add_action('wp_ajax_data_person' , 'data_person');
  add_action('wp_ajax_nopriv_data_person','data_person');

  function data_person(){
    $catname = $_POST['catName'];
    $catdesc = $_POST["catDesc"];
    $cat_ID = get_cat_ID( sanitize_title_for_query($catname) );  
    // Check if category exists
    if($cat_ID == 0) {
        $cat_name = $catname;  
        $cat_desc = $catdesc;
        $cat_slug = sanitize_title_with_dashes($cat_name);
        $my_cat = array(
          'cat_name' => $cat_name, 
          'category_description' => $cat_desc, 
          'category_nicename' => $cat_slug, 
          'category_parent' => 0
        );
        if( wp_insert_category( $my_cat ) ) {
          echo 'Category added successfully';
        } else {
          echo 'Error while creating new category';
        }
    } else {
      echo 'That category already exists';
    }
  }

Другие вопросы по теме