如何将数组php(从xml)转换为javascript以禁用datepicker中的日期(beforeShowDay)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (195)

通过get联系到另一个网站并获取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 ($tour->idmodelo == $cifraexcursion) {

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

然后需要将这些日期添加到javascript var中以在datepicker中使用。以下工作完美,但我无法使用数组$ tour-> 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 ".$tour->date;

但是,如果我这样做试图保存为javascript数组它可以工作,但我只得到四个日期的最后日期。

    var array=["<?php echo ($tour->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解析为数组的原始js示例.

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.log(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.log(myArray[i]);
  document.write(myArray[i] + "<br/>");
}
用户回答回答于

既然你似乎在使用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
  })
);

扫码关注云+社区

领取腾讯云代金券