加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Jquery Ajax,不在Internet Explorer中工作

发布时间:2020-12-15 23:57:12 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试做一些jQuery ajax,它适用于Firfox和Chrome,但不适用于Internet Explorer 9. 最终的代码必须跨越子域,这在默认传输中不起作用. 所以我正在尝试创建一个在Internet Explorer中使用的自定义传输 方法1 $.ajaxTransport("+*",function (options,origi
我正在尝试做一些jQuery ajax,它适用于Firfox和Chrome,但不适用于Internet Explorer 9.

最终的代码必须跨越子域,这在默认传输中不起作用.

所以我正在尝试创建一个在Internet Explorer中使用的自定义传输

方法1

$.ajaxTransport("+*",function (options,originalOptions,jqXHR) {
    if (jQuery.browser.msie && window.XDomainRequest) {
        var xdr;
        return {
            send: function (headers,completeCallback) {
                // Use Microsoft XDR
                xdr = new XDomainRequest();
                xdr.open("get",options.url);
                xdr.onload = function () {
                    if (this.contentType.match(//xml/)) {
                        var dom = new ActiveXObject("Microsoft.XMLDOM");
                        dom.async = false;
                        dom.loadXML(this.responseText);
                        completeCallback(200,"success",[dom]);
                    } else {
                        completeCallback(200,[this.responseText]);
                    }
                };
                xdr.ontimeout = function () {
                    completeCallback(408,"error",["The request timed out."]);
                };
                xdr.onerror = function () {
                    completeCallback(404,["The requested resource could not be found."]);
                };
                xdr.send();
            },abort: function () {
                if (xdr) xdr.abort();
            }
        };
    }
});

我已经创建了一个简单的示例页面来演示第一种技术:
http://services.whygo.net/sendAjax.htm

请注意,如果您使用自定义传输,则正常传输将失败,除非您刷新

这个想法来自这里:
http://forum.jquery.com/topic/cross-domain-ajax-and-ie#14737000002203097

当它失败时,在$ajax上调用的’error’方法中,除了’error’之外,不会给出任何错误消息.我确实在if工具的’Network’选项卡上得到了一个405方法,但是服务器端的东西确实执行了.

方法2
我还尝试了另一种方法,如下所述:
Cross-subdomain AJAX works in Chrome,not IE

if ('XDomainRequest' in window && window.XDomainRequest !== null) {

    // override default jQuery transport
    jQuery.ajaxSettings.xhr = function() {
        try { return new XDomainRequest(); }
        catch(e) { }
     };
}

这可以在这里找到:
http://www.whygo.net/sendAjax2.html

在这个实际上,我实际上在ie工具的’network’选项卡上获得了200个代码,但是没有调用$ajax的’错误’或’成功’pararm.

如果我在第二个上加一个超时,那么它会返回’error’函数并显示’timeout’消息.

解决方法

这是我经过大约一天的努力解决这个不一致之后的解决方案……
// new method as to not overwrite jQuery's defaults
var cors = (window.XDomainRequest) ? function(url,callback) {

    var xdr = new XDomainRequest();
    xdr.open('get',url);
    xdr.onload = function() { callback(xdr.responseText); }
    xdr.send();

} : $.get; // else,use jQuery's method

使用…

cors(url,function(msg) { alert(msg); }); // pretty well same as $.get

复制和粘贴,这当然不能用于所有目的,但它是一个开始,它的工作原理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读