jquery - IE8 和 Jquery .post ajax 调用不起作用

标签 jquery ajax json internet-explorer-8

下面的 ajax 调用提交表单数据并从服务器接收作为 json 编码对象/数组的反馈。适用于 IE10 以及最新版本的 FF 和 Chrome。

在 IE8 中不起作用。使用 IE8 开发人员工具,我可以看到 json 数组实际上从我的服务器返回到我的浏览器。然而,在带有“$.each”语句的行,它完全跳过该循环,就好像 ajax 响应中没有数据一样。

有人知道问题出在哪里吗?我阅读了其他论坛,有些人建议使用 datatype = json,但不确定如何将其放入我的代码中。其他人建议将 .post 更改为 .ajax。但在我真正理解为什么 IE8 在这方面失败之前,我不想做出改变。

$.post( "<?php echo Router::url(array('controller'=>'Bookings','action'=>'saveBooking_ajax')); ?>", $( ".reservationform" ).serialize(), function() {

            })
                .done(function(data) {

                    parseddata = JSON.parse(data); 

                    //IE8 totally skips this next part even if parseddata has data
                    $.each(parseddata, function(key, value) {
                        if (key == "status") status = value;
                        if (key == "message") message = value;
                        if (key == "failuretype") failuretype = value;
                        if (key == "bookingref") bookingref = value;
                    });

服务器返回响应示例:

 {"status":true,"failtype":"USER","message":"","timeslots":[[{"18:00:00":"6:00 pm"},{"18:10:00":"6:10 pm"},{"18:20:00":"6:20 pm"},{"18:30:00":"6:30 pm"},{"18:40:00":"6:40 pm"},{"19:20:00":"7:20 pm"},{"19:30:00":"7:30 pm"},{"19:40:00":"7:40 pm"},{"20:20:00":"8:20 pm"},{"20:30:00":"8:30 pm"},{"20:40:00":"8:40 pm"}]]}

使用@BARMAR ANSWER回答

我已更改代码以使用“json”参数作为 .post 调用的一部分。

我相信这会自动将返回解析为 json 对象,因此我不必再在 did() 函数中调用 JSON.parse(data) 。 JSON.parse(data) 无论如何在 IE8 中不起作用。请注意,我没有按照 Barmar 的建议尝试使用“$.parseJSON()”。

            //parseddata = JSON.parse(data);

然后我还按照建议直接访问了返回对象变量:

            status = data.status;
            message = data.message;
            failtype = data.failtype;
            timeslots = data.timeslots;

这似乎在大多数情况下都有效。但在 IE8 中对于变量“Status”不起作用!因为变量“status”由于某种原因在页面加载时被键入为没有值的字符串,并且无法传递 data.status 的值,这是一个真正的非字符串 bool 值。因此变量“status”保持为“”。其他变量看起来不错。

这很奇怪,因为这适用于其他现代浏览器,变量“status”已经被输入为空字符串“”,尽管 data.status = true,但它以某种方式成功地将值分配给“status”,给出变量“status” bool 值“true”的字符串版本。

抱歉,如果这是长篇大论,但是尽管 IE8 无法将纯 bool 值传递给字符串变量,但我认为我应该停止使用“status”作为变量名,因为在未知的地方它已经被输入并初始化了作为“”。

请参阅 Firefox 中的调试屏幕,其中 var“status” 神秘地预先键入为空字符串。在 IE 中也是如此。

enter image description here 我还意识到我应该使用“var”在回调中声明变量。不使用 var 会导致它们进入全局范围,并保留与之前回调相同的值。

无论如何,我将此问题标记为已回答,因为原始问题已得到回答。

最佳答案

我认为 IE8 没有 JSON.parse()。使用$.parseJSON()。或者将 datatype 参数指定为 `$.post:

$.post("url", $(".reservationform").serialize, "json")
    .done(function(parseddate) {
        status = parseddata.status;
        message = parseddata.message;
        failuretype = parseddata.failuretype;
        bookingref = parseddata.bookingref;
});

您也不需要使用 $.each() 从数据中读取值。它是一个Javascript对象,直接访问属性即可。

关于jquery - IE8 和 Jquery .post ajax 调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24475584/

相关文章:

java - Json 字符串转数组

javascript - 将 JSON 附加到包含相关信息的 HTML 容器

jquery - 在私有(private)商业应用程序中使用 jQuery

javascript - 跨浏览器右键单击插件与jquery?

php - Laravel Ajax 响应和处理错误

来自 Class 的 C# Json 格式化

javascript - 使用不同的参数从 C# 多次调用 javascript 函数

javascript - 如何根据 ajax 成功创建 Stripe token 的条件

javascript - Coffeescript ajax 成功调用外部函数

php - 来自PHP服务的JSON解析问题