Преобразование массива php (из xml) в javascript, чтобы отключить даты в datepicker (beforeShowDay)

Я связываюсь с другим веб-сайтом, получая и получаю результат xml для интерпретации.

Обращаюсь так:

   $v= file_get_contents(  
   "https://www.v.com/fechasexcursion.php? 
   agent=M&password=s&fecha1=2018-10-05&fecha2=2018-12- 
   31&idmodelo=$cifraexcursion");

Затем я анализирую информацию, чтобы получить даты из xml, чтобы отключить эти даты в datepicker:

     $cifraexcursion = 9;
     $xml = new SimpleXMLElement($v);
     foreach ($xml->excursion as $tour) {   
        if ($nameoftour->idmodelo == $cifraexcursion) {
          echo "<br>Date ".$nameoftour->date;

Затем мне нужно добавить эти даты в переменную javascript для использования в datepicker. Ниже работает отлично, но я не могу использовать массив $ nameoftour-> date

     <script>
     var array = ["2018-10-14","2018-10-15","2018-10-16"];

     $('input').datepicker({
         beforeShowDay: function(date){
         var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
         return [ array.indexOf(string) == -1 ]
         }
      });
      (function() {
        $.datepicker.setDefaults({
          regional: 'en',
          buttonImage: "/images/calendar_blue.png",
          buttonImageOnly: true,
          firstDay: 1,
        }) 
      })();
     </script> 

Обновлено: Это распечатает 4 даты:

    echo "<br>Date ".$nameoftour->date;

Однако, если я сделаю это, пытаясь сохранить как массив javascript, он работает, но я получаю только последнюю дату из четырех дат.

    var array=["<?php echo ($nameoftour->date);?>",];

Обновлено: У меня все заработало:

    $xml = new SimpleXMLElement($viajes);
    $tmpArrayFechas = [];
      foreach ($xml->excursion as $excursion) {
        if ($excursion->idmodelo == $cifraexcursion) {
        $tmpArrayFechas[] = $excursion->fecha;
        }
      }
     $tmpArrayFechas = implode(',', $tmpArrayFechas);
    ?>
    <input type = "hidden" id = "plazasDisponibles" 
     name = "plazasDisponibles" 
     value = "<?php echo $tmpArrayFechas; ?>">
    <script>

    var arrayDiasDisponibles = 
      document.querySelector("#plazasDisponibles").value.split(',');
    $('input').datepicker({
      beforeShowDay: function(date){
      var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
      return [ arrayDiasDisponibles.indexOf(string) !== -1 ]
      }
    });

    (function() {
       $.datepicker.setDefaults({
         regional: 'en',
         buttonImage: "/images/calendar_blue.png",
         buttonImageOnly: true,
         firstDay: 1,
       })
     })();
    </script>

Я использую информацию xml следующим образом: $ tour-> date

Helenp 05.10.2018 21:03

Чтобы получить дополнительную помощь по этому поводу: отредактируйте свой пост и добавьте тег php, чтобы гуру PHP увидели ваш вопрос; Кроме того, я думаю, было бы полезно, если бы вы предоставили PHP-код, который ведет к вашей переменной $tour. Наконец, если вы можете, дайте представление о том, как вы хотите передавать данные с серверного PHP на клиентский JS: записываете ли вы данные непосредственно в выходной файл HTML / JS, загруженный со страницей, есть ли у вас конечная точка, которую нужно достичь с помощью AJAX, выполните у вас есть поток сокетов или даже почтовый голубь, который вы хотите использовать, и т. д.

Stock Overflaw 06.10.2018 10:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
80
2

Ответы 2

Поскольку вы, похоже, используете jQuery, вы можете использовать $ .parseXML, а затем вы можете обернуть его в jQuery и .find('date'). Что-то вроде этого должно получиться:

var output = Array.from( // if you need an array (and not just iterable object)
  $( // wrap the XMLDocument in jQuery to parse it with .find
    $.parseXML(rawXmlData) // parse the XML into an XMLDocument
  )
  .find('date') // find the nodes we need
  .map(function (index, element) { // map the tags/nodes
    return $(element).text(); // retrieve only the content
  })
);

Боюсь, я неправильно задал вопрос. Спасибо, в любом случае

Helenp 06.10.2018 09:56

Вот необработанный пример js некоторого кода, анализирующего xml в массив ...

var myXml = "<root><tour><date>2018-10-14</date></tour><tour><date>2018-10-15</date></tour><tour><date>2018-10-18</date></tour></root>";
    
if (window.DOMParser)
{
    parser = new DOMParser();
    console.info(parser);
    xmlDoc = parser.parseFromString(myXml, "text/xml");    
}
else // Internet Explorer
{
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = false;
    xmlDoc.loadXML(myXml);
}

var elementsCollection = xmlDoc.getElementsByTagName("date");
var myArray = [];

for(var i = 0; i < elementsCollection.length; i++) {
  myArray.push(elementsCollection[i].innerHTML);  
};

for(i = 0; i < myArray.length; i++)
{
  console.info(myArray[i]);
  document.write(myArray[i] + "<br/>");
}

Мне очень помог следующий пост: Разбирать XML с помощью JavaScript

Также обратите внимание, что парсер dom не будет очень хорошо разбирать ваш xml, если у вас нет единственного корневого элемента, поэтому вы заметите, что в моем примере я добавил элемент.

Это работает, спасибо, но не знаю, как изменить содержимое var myXml на $ tour-> date

Helenp 05.10.2018 21:01

Нет, корневого элемента нет, это не мой xml, я получаю из другой сети.

Helenp 05.10.2018 21:05

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