Как нажать на массив JQuery из PHP с помощью AJAX? - PullRequest
0 голосов
/ 01 июля 2019

Я запускаю следующее на сервере (PHP), где зацикливаю свои сообщения и беру некоторые координаты, которые у меня есть, в поле gmap:

      $location = get_field('location');
      $lat = $location['lat'];
      $lng = $location['lng'];

Затем я создаю одну пару координат lat и lng следующим образом:

      $coordinates = $lat.", ".$lng;
      echo $coordinates;

А затем на клиенте в JavaScript ajax success я помещаю каждую из этих пар в массив var coords = [];, который у меня есть в нижнем колонтитуле.

Но я получаю странный результат в консоли:

["4"]
(index):148 (2) ["4", "0"]
(index):148 (3) ["4", "0", "."]
(index):148 (4) ["4", "0", ".", "7"]
(index):148 (5) ["4", "0", ".", "7", "2"]
(index):148 (6) ["4", "0", ".", "7", "2", "7"]
(index):148 (7) ["4", "0", ".", "7", "2", "7", "2"]
(index):148 (8) ["4", "0", ".", "7", "2", "7", "2", "0"]...

Так вот и весь код:

PHP

      function data_fetch(){
        $dates = $_POST['dates'];
        $dates = explode(',', $dates);
        $args = array(
          'meta_query' => array(
            array(
              'key' => 'anno',
              'value' => array($dates[0], $dates[1]),
              'compare' => 'BETWEEN',
              'type' => 'NUMERIC'
            ),
          )
        );
        $query = new WP_Query( $args );
        if( $query->have_posts() ): while( $query->have_posts() ) : $query->the_post();
          $location = get_field('location');
          $lat = $location['lat'];
          $lng = $location['lng'];
          $coordinates = $lat.", ".$lng;
          echo $coordinates;
        endwhile; endif;
        die();
      }

JavaScript

$(document).ready(function() {
  $("#searchNations").on("click", function() {
    //clearOverlays();
    fetch(datesSearch);
  });
  fetch(datesSearch);

  function fetch(datesSearch) {
    $.ajax({
      url: '<?php echo admin_url('
      admin - ajax.php '); ?>',
      type: 'post',
      dataType: 'json',
      data: {
        action: 'data_fetch',
        dates: datesSearch
      },
      success: function(data) {
        var data = $.parseJSON(data);
        for (var i = 0; i < data.length - 1; i++) {
          coords.push(data[i]);
          console.log(coords);
        };
      }
    });
  }
});

1 Ответ

1 голос
/ 01 июля 2019

В php вы выводите свои координаты в виде строки, но обрабатываете их в javascript как json.Вы должны вставить координаты в массив и закодировать их:

if( $query->have_posts() ): 
    $coordinates = [];
    while( $query->have_posts() ) : $query->the_post();
        $location = get_field('location');
        $lat = $location['lat'];
        $lng = $location['lng'];
        $coordinates[] = $lat.", ".$lng;
    endwhile;
    echo json_encode($coordinates);
    die;
endif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...