thehighhomie
@thehighhomie

Wordpress: при отправки AJAX JSON экранируются кавычки?

Почему при отправки json аяксом экранируются ковычки?

ajax.js:
send();

  function send() {

    let $form = $('#form');

    $form.on('submit', (e) => {

      e.preventDefault();
      let formData = new FormData();
      let obj = { name: 'Paul', age: 26 };

      formData.append('nonce', zzz_ajax.nonce);
      formData.append('action', 'send');
      formData.append('obj', JSON.stringify(obj));

      $.ajax({
        type: 'post',
        url: zzz_ajax.url,
        data: formData,
        processData: false,
        contentType: false
      })
        .done(function(res) {
          console.log(res);
        });

    });


ajax.php:
add_action('wp_ajax_send', 'send');
add_action('wp_ajax_nopriv_send', 'send');

function send() {
	if ( ! wp_verify_nonce( $_POST['nonce'], 'myajax-nonce' ) )
    die ( 'Stop!');

  $obj =  $_POST['obj'] ;

  echo var_dump( $obj );

  wp_die();
}


и вот что приходит: string(30) "{\"name\":\"Paul\",\"age\":26}".

Если декодировать json ( json_decode() ) то значением будет null.

Я так понимаю это из за того что сам объект взят в двойные ковычки, но если я такую же операцию сделаю не на вордпрессе а на тестовом серваке то json придет нормальный. Как это исправить?
  • Вопрос задан
  • 537 просмотров
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Так $_POST и так будет содержать данные формы, зачем вы делаете JSON.stringify(obj) и конвертируете в строку? Именно эта строка потом и оборачивается в кавычки. И поскольку это строка, а не JSON прилетает на PHP, то и json_decode ее не может проглотить.

Вот тут есть рабочий пример:
https://www.sitepoint.com/jquery-php-ajax-json/
Ответ написан
Ваш ответ на вопрос

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

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