需要解决ie8的Jquery问题


Need to solve IE 8 Jquery problem

在开发过程中,我遇到了一个奇怪的问题。以下是我的jquery代码加载2个日期picker时,页面加载,这2个日期picker禁用日期是不可用的,以下是代码:

$(document).ready(function () {
                                $('#textfield1').datepicker( "destroy" );
                                $('#textfield2').datepicker( "destroy" );
                                $("#loading2").html('<img src="images/loading.gif"/>');
                                var dataString = 'a=b';
                                $.ajax({
                                    type: "GET",
                                    url: "include/getdate.php",
                                    data: dataString,
                                    success: function(data){
                                        $(".tempimg").hide();
                                        $("#textfield1hid").datepicker({ 
                                            showOn: "button",
                                            buttonImage: "/images/calendar.gif",
                                            buttonImageOnly: true,
                                            dateFormat: 'd M yy',
                                            altField: "#textfield1",
                                            altFormat: "yy-mm-dd",
                                            beforeShowDay: reservedDates
                                        });
                                        $("#textfield2hid").datepicker({ 
                                            showOn: "button",
                                            buttonImage: "/images/calendar.gif",
                                            buttonImageOnly: true,
                                            dateFormat: 'd M yy',
                                            altField: "#textfield2",
                                            altFormat: "yy-mm-dd",
                                            beforeShowDay: reservedDates
                                        });
                                        natDays = data;
                                        function reservedDates(date) {
                                            for (i = 0; i < natDays.length; i++) {
                                              if (date.getMonth() == natDays[i][0] - 1
                                                  && date.getDate() == natDays[i][1]) {
                                                return [false, natDays[i][2] + '_day'];
                                              }
                                            }
                                          return [true, ''];
                                        }
                                            $("#loading2").html('');
                                        }
                                    });
                                    return false;
                                });

此代码在Firefox和IE7上运行良好。但是当它在IE8中显示时,日期摘取器没有加载,但是ajax响应来自服务器。这是我的两个文本字段

<input type="text" name="textfield1hid" id="textfield1hid" />
                                    <input type="text" name="textfield2hid" id="textfield2hid" />

这是来自服务器的响应:

[[04,01],[04,01],[04,02],[04,02],[04,03],[04,03]]

在IE8加载页面后,文本字段仍然如下图所示

<input name="textfield1hid" disabled="disabled" id="textfield1hid" style="background-color: #a0a0a4;" type="text"/>

下一个文本字段也得到相同的属性,我很久以前添加了它们,并将它们全部删除,其他浏览器工作正常,甚至IE7,但问题是在IE8

谁能帮我解决这个问题?

你可以试试这个吗:

将dataType改为text

并计算数据

natDays = eval('(' + data + ')');

我记得在IE中遇到过类似的问题,当时我没有指定我期望的响应格式。尝试在ajax请求中设置dataType,像这样:

$.ajax({
    type: "GET",
    url: "include/getdate.php",
    data: dataString,
    dataType: 'json',
    success: successCallback
}

如果你想捕获错误,你应该能够像这样指定一个错误回调:

$.ajax({
    ....
    error: errorCallback
    ....
}
function errorCallback(jqXHR, textStatus, errorThrown) {
    alert(jqXHR);
    alert(textStatus);
    alert(errorThrown);
}

有json库

JSON.parse('[{"some":"json"}]');
JSON.stringify([{some:'json'}]);
参考