Массив становится многомерным в AJAX-запросе - PullRequest
0 голосов
/ 25 февраля 2019

Итак, я создаю функцию в WordPress, которая подсчитывает и устанавливает сеанс пользователя и сохраняет его значения в локальном хранилище пользователя.Я смог заставить его работать отлично, используя куки, и когда сайт размещен локально, по какой-то причине он не работает, когда я загрузил его на промежуточный сайт.Поэтому я пытаюсь реализовать эту функцию, используя другой подход, и решил вместо этого использовать локальное хранилище.

Существует проблема со значениями массива, которые генерирует функция, и я потратил почти весь день, пытаясь отладить проблему.Он генерирует многомерный вместо одного.

Вот мой код функции:

function monitor_post_views() {
  $page_id = 'page' . $_POST['page_id'];
  $timestamp = time();  
  // 30 minutes timeout
  $timeout = 1800;
  // Serves as my guide for debugging, will not include in the final code
  $message = '';


  if ( ! empty($_POST['page_id_array']) ) {
     //Checks if values from local storage exist

     //Gets the stored Array coming from AJAX call
     $page_id_array[] = json_decode(stripslashes($_POST['page_id_array']), true);

     if ( in_array_r($page_id_array, $page_id) ) {
        //Check if current page is found in array

        $message = 'FOUND IN ARRAY CHECKING !!!!';

        $temp= [];

        $page_id_array_temp = array('id' => $page_id, 'expiration' => $timestamp, 'message' => $message);

        $temp = $page_id_array_temp;

        //Pushes the generated array inside the $page_id_array
        array_push($page_id_array, $temp);

        print_r(json_encode($page_id_array));

        foreach ( $page_id_array as $page ) {
            //If page is in array, check if the session is expired, if not, do nothing, if expired, update and then run the view function
        }
    } else {
      // ID Not found in Array, Insert a new entry

      $message = 'ID NOT FOUND IN ARRAY, CREATING ENTRY !!!';

      $temp = [];

      $page_id_array_temp = array('id' => $page_id, 'expiration' => $timestamp, 'message' => $message);

      $temp = $page_id_array_temp;

      //Pushes the generated array inside the $page_id_array
      array_push($page_id_array, $temp);

      print_r(json_encode($page_id_array));

      //Set post view function here base on $_POST['page_id']

    }

  } else {
    //Not found in local storage, need to create one

    $message = 'CREATING A NEW ENTRY !!!!';

    $temp = [];

    $page_id_array = array('id' => $page_id, 'expiration' => $timestamp, 'message' => $message);

    $temp = $page_id_array;

    print_r(json_encode($temp));

    //Set post view function here base on $_POST['page_id']

  }

  wp_die();

}
add_action('wp_ajax_monitor_post_views', 'monitor_post_views');
add_action('wp_ajax_nopriv_monitor_post_views', 'monitor_post_views');

Вот скриншот того, что генерирует эта функция

Array

Вот примерJSON

[[{"id":"page1202","expiration":1551125579,"message":"FOUND IN ARRAY CHECKING !!!!"},{"id":"page1206","expiration":1551125613,"message":"ID NOT FOUND IN ARRAY !!!! INSERTING ENTRY !!!"}],{"id":"page1296","expiration":1551125624,"message":"ID NOT FOUND IN ARRAY !!!! INSERTING ENTRY !!!"}]

Я пытался сгенерировать одномерное, но закончил с этим.Какие-нибудь мысли?Заранее спасибо

1 Ответ

0 голосов
/ 26 февраля 2019

Проблема в том, что вы создаете массивы слишком много раз:

Измените $ page_id_array и $ page_id_array_temp на

 $page_id_array=new \stdClass();//no need to declare as an array

, замените

$page_id_array_temp = array('id' => $page_id, 'expiration' => $timestamp, 'message' => $message);

на

 $page_id_array->id=$page_id;
 $page_id_array->expiration=$timestamp;
 $page_id_array->message=$message;

также измените

$temp = []; 

вы можете использовать его напрямую // не нужно объявлять $ temp как массив

 $temp=$page_id_array;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...