请问大家在IE8中ajax跨域请求时,遇到这些问题了吗?你们是怎么解决的?

hexllo 2015-08-11 06:34:31
我用的是jquery框架的ajax请求,在chrome,FF中正常.
在IE中提示 拒绝访问.
对IE进行下图这样的设置后能正常访问:



但是不可能为每个客户的IE都这样去设置啊..

后来在网上找了一下,用XDomainRequest,但是用它时,就算加了xdr.withCredentials=true;还是不能将sesionID传给服务器.
用IE打开跟踪它的对象时,发现它没有这个属性,也没有设置请求头的方法..在网上找了很久,他们都是通过将sessionID放到请求的URL里做为查询字符串,然后在后台读取的.

可是后台接口中的方法太多,不想去一个个改.也不想改,改了之后移动端的代码也要做改动,工程量大.

问题总结如下:
1,用jquery的ajax,要对客户的IE手动进行设置.有什么办法可以绕过这步呢?js有没有可能设置浏览器选项?

2,用XDomainRequest,post请求中无法传递sessionID或cookie给服务器.除了用查询字符串,还有哪些办法?

3,问个题外话,jquery 中的$.ajax(...) 是用XMLHttpRequest来实现的吗?看它回调函数的名称很像.

现在IE8的使用率还是位居第2,不考虑它都不行啊..唉..很想知道大家在处理它的跨域请求时,都是怎么解决的..(不用jsonP,因为它也要改后台,而且只支持get请求),首次接触跨域,请多指教,谢谢了!
...全文
2509 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghuanhuanlifeng 2016-04-16
  • 打赏
  • 举报
回复
楼主问题怎么解决的分享下吧
hexllo 2015-08-12
  • 打赏
  • 举报
回复
引入了这段js之后,用IE8跨域访问时还是会 提示"拒绝访问"... 你在电脑上试一下呢,看你的会不会啊?
顾小林 2015-08-12
  • 打赏
  • 举报
回复
直接在html引入这个js 开启 ajax的普通crossdomain属性 然后正常调用ajax就行,这段代码只能支持异步
hexllo 2015-08-12
  • 打赏
  • 举报
回复
谢谢你的回答,请问1楼中的代码怎么调用呢?
顾小林 2015-08-11
  • 打赏
  • 举报
回复
也可以通过jsonp
顾小林 2015-08-11
  • 打赏
  • 举报
回复

Skip to content
Sign up Sign in
This repository  
Explore
Features
Enterprise
Blog
 Watch 38  Star 552  Fork 171 MoonScript/jQuery-ajaxTransport-XDomainRequest
Branch: master  jQuery-ajaxTransport-XDomainRequest/jQuery.XDomainRequest.js
@MoonScriptMoonScript on 6 Mar Bump versions numbers and notes to v1.0.4
7 contributors @MoonScript @riddla @jcruz2us @laurens @fidian @devongovett @cbaxter
RawBlameHistory     120 lines (106 sloc)  3.979 kB
/*!
 * jQuery-ajaxTransport-XDomainRequest - v1.0.4 - 2015-03-05
 * https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
 * Copyright (c) 2015 Jason Moon (@JSONMOON)
 * Licensed MIT (/blob/master/LICENSE.txt)
 */
(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as anonymous module.
    define(['jquery'], factory);
  } else if (typeof exports === 'object') {
    // CommonJS
    module.exports = factory(require('jquery'));
  } else {
    // Browser globals.
    factory(jQuery);
  }
}(function($) {

// Only continue if we're on IE8/IE9 with jQuery 1.5+ (contains the ajaxTransport function)
if ($.support.cors || !$.ajaxTransport || !window.XDomainRequest) {
  return $;
}

var httpRegEx = /^(https?:)?\/\//i;
var getOrPostRegEx = /^get|post$/i;
var sameSchemeRegEx = new RegExp('^(\/\/|' + location.protocol + ')', 'i');

// ajaxTransport exists in jQuery 1.5+
$.ajaxTransport('* text html xml json', function(options, userOptions, jqXHR) {

  // Only continue if the request is: asynchronous, uses GET or POST method, has HTTP or HTTPS protocol, and has the same scheme as the calling page
  if (!options.crossDomain || !options.async || !getOrPostRegEx.test(options.type) || !httpRegEx.test(options.url) || !sameSchemeRegEx.test(options.url)) {
    return;
  }

  var xdr = null;

  return {
    send: function(headers, complete) {
      var postData = '';
      var userType = (userOptions.dataType || '').toLowerCase();

      xdr = new XDomainRequest();
      if (/^\d+$/.test(userOptions.timeout)) {
        xdr.timeout = userOptions.timeout;
      }

      xdr.ontimeout = function() {
        complete(500, 'timeout');
      };

      xdr.onload = function() {
        var allResponseHeaders = 'Content-Length: ' + xdr.responseText.length + '\r\nContent-Type: ' + xdr.contentType;
        var status = {
          code: 200,
          message: 'success'
        };
        var responses = {
          text: xdr.responseText
        };
        try {
          if (userType === 'html' || /text\/html/i.test(xdr.contentType)) {
            responses.html = xdr.responseText;
          } else if (userType === 'json' || (userType !== 'text' && /\/json/i.test(xdr.contentType))) {
            try {
              responses.json = $.parseJSON(xdr.responseText);
            } catch(e) {
              status.code = 500;
              status.message = 'parseerror';
              //throw 'Invalid JSON: ' + xdr.responseText;
            }
          } else if (userType === 'xml' || (userType !== 'text' && /\/xml/i.test(xdr.contentType))) {
            var doc = new ActiveXObject('Microsoft.XMLDOM');
            doc.async = false;
            try {
              doc.loadXML(xdr.responseText);
            } catch(e) {
              doc = undefined;
            }
            if (!doc || !doc.documentElement || doc.getElementsByTagName('parsererror').length) {
              status.code = 500;
              status.message = 'parseerror';
              throw 'Invalid XML: ' + xdr.responseText;
            }
            responses.xml = doc;
          }
        } catch(parseMessage) {
          throw parseMessage;
        } finally {
          complete(status.code, status.message, responses, allResponseHeaders);
        }
      };

      // set an empty handler for 'onprogress' so requests don't get aborted
      xdr.onprogress = function(){};
      xdr.onerror = function() {
        complete(500, 'error', {
          text: xdr.responseText
        });
      };

      if (userOptions.data) {
        postData = ($.type(userOptions.data) === 'string') ? userOptions.data : $.param(userOptions.data);
      }
      xdr.open(options.type, options.url);
      xdr.send(postData);
    },
    abort: function() {
      if (xdr) {
        xdr.abort();
      }
    }
  };
});

return $;

}));
Status API Training Shop Blog About Help
© 2015 GitHub, Inc. Terms Privacy Security Contact
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.js

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧