【问题标题】:php output to javascript array with jsonphp输出到带有json的javascript数组
【发布时间】:2014-09-13 10:55:06
【问题描述】:

我有一个项目会输出 json_encode 日期项字符串。

看起来像这样:

<input type="hidden" class="avail_dates" data-id='["12-9-2014", "7-9-2014"]' />

我尝试了不同的方法,但由于这个项目必须存在,我不能简单地进行 ajax 调用并返回 json_encode 内容。

因此,我需要以某种方式将 data-id 放入 javascript 数组中以获取 datePicker。

使用这个可以,但它是硬编码的:

var availableDates = ["9-9-2014","5-9-2014","7-9-2014"];

使用它不会做任何事情:

var availableDatesArray = jQuery('.avail_dates').attr('data-id'); 
//alerting gives ["9-9-2014","5-9-2014","7-9-2014"]

有没有办法将字符串转换为有效的数组?

我可以更改数据进入 data-id 的方式,或者 jquery 与元素交互的方式,但我不能为此添加单独的 ajax 查询,它必须来自该 data-id。

var availableDates = ["9-9-2014","5-9-2014","7-9-2014"];    

function dates(date){
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
    console.log(dmy+' : '+(jQuery.inArray(dmy, availableDates)));
    if (jQuery.inArray(dmy, availableDates) != -1) {
        return [true, "","Available"];
    } 
    else {
        return [false,"","unAvailable"];
    }           
    return;
}

jQuery('#myDates').datepicker({
changeYear: true,
maxDate: '0',
changeMonth: true,
dateFormat: "mm/dd/yy",
yearRange: '2014:2030',
beforeShowDay: dates,       
onSelect: function(dateText) {

}
});

编辑: 应该提到我已经尝试过 json.parse。它给出了“意外数字”错误。

编辑 2:我添加了我正在尝试为 jQuery datePicker 传递数据的函数。

【问题讨论】:

  • 我无法使用JSON.parse 重现您的“意外数字”错误。你能提供一个jsfiddle吗?
  • @David,JSON.parse 在此处使用显示为jsfiddle.net/js3qnae1的html 工作正常@
  • @David,很可能有一些你没有告诉我们的缺失部分,就目前而言,使用你的示例,使用 JSON.parse,并且 .data 可以正常工作
  • 查看编辑,我添加了我用来传递它的函数。当它被硬编码时,它工作得很好,动态地根本不行。 json.parse 报错

标签: javascript php jquery arrays json


【解决方案1】:

是的,您可以使用JSON.parse。像这样:

var availableDatesArray = jQuery('.avail_dates').attr('data-id'); 
availableDatesArray = JSON.parse(availableDatesArray);
console.log(availableDatesArray);

或者@charlie 更好的建议

var availableDatesArray = jQuery('.avail_dates').data('id'); // much better

【讨论】:

  • 不需要使用JSON.parse(),如果使用jQuery.data(),如果它是有效的JSON,则将其读取为数组并在内部解析它
  • 应该提到我已经尝试过 json.parse。它给出了“意外数字”错误
  • 不起作用。格式为“9-9-2014,5-9-2014,7-9-2014”,显然我需要括号和双引号才能使此功能正常工作
  • @David 该数据的来源是什么? PHP 是否与此相呼应?正如您在当前帖子中提出的问题,它工作正常。
  • @David 您的示例中有[]。它们不存在还是您要删除的东西?
【解决方案2】:

只需使用JSON.parse

示例:

var availableDatesArray = JSON.parse(jQuery('.avail_dates').attr('data-id'));

如果您愿意,可以使用jQuery.parseJSON

示例:

var availableDatesArray = jQuery.parseJSON(jQuery('.avail_dates').attr('data-id'));

这实际上是 jQuery 本身在 AJAX 响应中解析 JSON 的方式。

【讨论】:

    【解决方案3】:

    除非我误解了你的问题,否则你只需要使用JSON.parse

    var availableDatesArray = JSON.parse(jQuery('.avail_dates').attr('data-id'));
    

    jQuery('.avail_dates').attr('data-id') 只会返回一个字符串('data-id' 属性的内容。JSON.parse 实际上会从中创建一个 JavaScript 对象。

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      相关资源
      最近更新 更多