0

所以我从我的控制器发送一个 JSON 响应:

"date":["07%2F10%2F2013","07%2F16%2F2013","07%2F25%2F2013"]

使用 urlencode($date) 在 PHP 上对日期进行编码;

在我的 jquery 响应中,我是这样读的:

var dates = "+this.date+"; 
dates = decodeURIComponent(dates);
var unavailableDates = dates.split(',');

当用 console.log 打印时,我得到(使用 firebug 调试):

["07/10/2013", "07/16/2013", "07/25/2013"]

现在我这样做:

var dates = '07%2F10%2F2013,07%2F16%2F2013,07%2F25%2F2013';
dates = decodeURIComponent(dates);
var unavailableDates = dates.split(',');

得到完全相同的结果:

["07/10/2013", "07/16/2013", "07/25/2013"]

但是当试图在 jquery datepicker 上使用它作为不可用的日期的一部分时,只有代码的底部部分有效。有谁知道为什么?

4

1 回答 1

0

这更像是一个评论而不是一个答案,因为我不知道是什么导致了这个问题。但是我不能在评论中进行代码格式化,所以这里......

您是否有某些原因必须对 JSON 数据进行 URL 编码?这不是您通常会在 JSON 响应中执行的操作。只需让 PHP 的json_encode()函数担心需要特殊编码的内容即可。

如果没有编码,您的 JSON 响应(或部分响应)将如下所示:

"date":["07-10-2013","07-16-2013","07-25-2013"]

这正是您正在寻找的格式。这整个代码块变得不必要了:

var dates = "+this.date+"; 
dates = decodeURIComponent(dates);
var unavailableDates = dates.split(',');

因为this.date已经正是你想要的unavailableDates

现在关于您的问题:没有明显的理由表明您的日期数组中的一个可以工作而另一个则不能。如果你想检查特殊字符,你可以把两个版本都放在你的代码中——调用最终的输出数组d1d2比较它们:

if( d1[0] !== d2[0]  ||  d1[1] !== d2[1]  ||  d1[2] !== d2[2] ) {
    debugger;  // stop to investigate the situation
}

但我会从摆脱 URL 编码开始。它对你没有任何好处,只会使事情复杂化。

于 2013-06-14T21:58:27.487 回答