【问题标题】:IE8 Ajax submission always throws error functionIE8 Ajax提交总是抛出错误函数
【发布时间】:2014-04-04 18:22:53
【问题描述】:

此代码适用于 XP 机器上除 IE8 之外的所有其他浏览器。不能为我的生活弄明白。在 IE8 中它总是会显示错误函数。我尝试将dataType更改为jsonp、text、html,不管它总是弹出错误函数。就像我说的,Chrome、Safari、Firefox 和所有其他 IE 都可以工作,而 IE8 则不行。

<script type="text/javascript">
    $("#zip").submit(function (e) {
        e.preventDefault();
        if ($(this).parsley('isValid') === true) {
            var el = $("#zipcode");
            if ((el.val().length == 5) && (is_int(el.val()))) {
                $.ajax({
                    url: "http://zip.elevenbasetwo.com/v2/US/" + el.val(),
                    cache: false,
                    dataType: "json",
                    type: "GET",

                    success: function (result, success) {
                        console.log(result.state);
                        $('.rates-zip').fadeOut(function () {
                            switch (result.state) {
                            case "California":
                                $('#western').fadeIn();
                                break;
                            case "Illinois":
                            case "Virginia":
                                $('#midwest').fadeIn();
                                break;
                            case "New York":
                            case "New Jersey":
                                $('#eastern').fadeIn();
                                break;
                            case "Washington":
                                $('#northwest').fadeIn();
                                break;
                            default:
                                $('#default').fadeIn();
                            }
                        })



                    },
                    error: function (result, success) {
                        alert("Error IE8");
                    }
                });
            }
        };

    });

    function is_int(value) {
        if ((parseFloat(value) == parseInt(value)) && !isNaN(value)) {
            return true;
        } else {
            return false;
        }
    }
</script>

希望有人可以解决。

【问题讨论】:

  • 检查操作错误。它说什么?
  • zip.elevenbasetwo.com 是您的域吗?您使用的是什么版本的 jQuery?我认为 IE8 支持 CORS 的方式与其他更现代的浏览器不同。
  • 您可能会遇到 IE8 无法与 e.preventDefault() 配合使用的情况之一,请参阅:stackoverflow.com/questions/21033728/…
  • @CameronTinker 你可能是对的。 caniuse.com/cors。本文似乎对此进行了更深入的研究,并提供了一些解决方法:blogs.msdn.com/b/ieinternals/archive/2010/05/13/…
  • 你需要一个jQuery插件来将CORS添加到IE8。

标签: javascript jquery ajax internet-explorer-8


【解决方案1】:

检查您是否在 jQuery 中启用了 CORS:

$.support.cors = true;

另外,请确保您在 IE8 中运行的版本不晚于 jQuery 1.9.1。 jQuery 2.x 中删除了对 IE8 的支持。

您可能需要根据 IE 版本将正确版本的 jQuery 动态插入到您的 DOM 中。

这样的事情可能会起作用:

var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
var ie = re.exec(navigator.userAgent)?parseFloat(RegExp.$1):10;

if(ie >= 10)
    document.write("<script src='/js/jquery2.1.0.js'><\/script>");
else
    document.write("<script src='/js/jquery1.9.1.js'><\/script>");

另外,对于 IE8,您需要使用 plugin 来启用带有 XDomainRequest 的 CORS,因为它不支持 XMLHTTPRequest。 jQuery 团队不打算向 jQuery 核心添加对此的支持,因为 IE8 是一个快速老化的浏览器。

除此之外,您的远程服务器还需要支持 CORS。它需要通过Access-Control-Allow-Origin 响应标头允许所有来源。如果响应中不存在此标头,则不会返回 200 OK 响应。

【讨论】:

    猜你喜欢
    • 2017-07-23
    • 2011-09-25
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多