frontend:

first :add $.support.cors=true; in front of the Ajax code.

seconde: add the crossDomain:true, attribute to the $.ajax.

webconfig:

add the following code to the node  <system.webServer>

<httpProtocol>
  <customHeaders>
    <add name="access-control-allow-headers" value="accept, origin, token,content-type" />
    <add name="Access-Control-Allow-Credentials" value="true" />
    <add name="Access-Control-Allow-Methods" value="OPTIONS, GET, POST" />
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

Note:

http->http

https->https

/*
* Copyright (C) 2011 Ovea <dev@ovea.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* https://gist.github.com/1114981
*
* By default, support transferring session cookie with XDomainRequest for IE. The cookie value is by default 'jsessionid'
*
* You can change the session cookie value like this, before including this script:
*
* window.XDR_SESSION_COOKIE_NAME = 'ID';
*
* Or if you want to disable cookie session support:
*
* window.XDR_SESSION_COOKIE_NAME = null;
*
* If you need to convert other cookies as headers:
*
* window.XDR_COOKIE_HEADERS = ['PHP_SESSION'];
*
* To DEBUG:
*
* window.XDR_DEBUG = true;
*
* To pass some headers:
*
* window.XDR_HEADERS = ['Content-Type', 'Accept']
*
*/
(function ($) { if (!('__jquery_xdomain__' in $)
&& /msie/.test(navigator.userAgent.toLowerCase()) // must be IE
&& 'XDomainRequest' in window // and support XDomainRequest (IE8+)
&& !(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()) // and must not support CORS (IE10+)
&& document.location.href.indexOf("file:///") == -1) { // and must not be local $['__jquery_xdomain__'] = $.support.cors = true; var urlMatcher = /^(((([^:\/#\?]+:)?(?:\/\/((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?]+)(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,
oldxhr = $.ajaxSettings.xhr,
sessionCookie = 'XDR_SESSION_COOKIE_NAME' in window ? window['XDR_SESSION_COOKIE_NAME'] : "jsessionid",
cookies = 'XDR_COOKIE_HEADERS' in window ? window['XDR_COOKIE_HEADERS'] : [],
headers = 'XDR_HEADERS' in window ? window['XDR_HEADERS'] : ['Content-Type', 'Token'],
ReadyState = { UNSENT: 0, OPENED: 1, LOADING: 3, DONE: 4 },
debug = window['XDR_DEBUG'] && 'console' in window,
XDomainRequestAdapter,
domain,
reqId = 0; function forEachCookie(names, fn) {
if (typeof names == 'string') {
names = [names];
}
var i, cookie;
for (i = 0; i < names.length; i++) {
cookie = new RegExp('(?:^|; )' + names[i] + '=([^;]*)', 'i').exec(document.cookie);
cookie = cookie && cookie[1];
if (cookie) {
fn.call(null, names[i], cookie);
}
}
} function parseResponse(str) {
// str === [data][header]~status~hlen~
// min: ~0~0~
if (str.length >= 5) {
// return[0] = status
// return[1] = data
// return[2] = header
var sub = str.substring(str.length <= 20 ? 0 : str.length - 20),
i = sub.length - 1,
end, hl, st;
if (sub.charAt(i) === '~') {
for (end = i--; i >= 0 && sub.charAt(i) !== '~'; i--);
hl = parseInt(sub.substring(i + 1, end));
if (!isNaN(hl) && hl >= 0 && i >= 2 && sub.charAt(i) === '~') {
for (end = i--; i >= 0 && sub.charAt(i) !== '~'; i--);
st = parseInt(sub.substring(i + 1, end));
if (!isNaN(st) && i >= 0 && sub.charAt(i) === '~') {
end = str.length - hl - sub.length + i;
return [st, str.substring(0, end), str.substr(end, hl)];
}
}
}
}
return [200, str, ''];
} function parseUrl(url) {
if (typeof (url) === "object") {
return url;
}
var matches = urlMatcher.exec(url);
return matches ? {
href: matches[0] || "",
hrefNoHash: matches[1] || "",
hrefNoSearch: matches[2] || "",
domain: matches[3] || "",
protocol: matches[4] || "",
authority: matches[5] || "",
username: matches[7] || "",
password: matches[8] || "",
host: matches[9] || "",
hostname: matches[10] || "",
port: matches[11] || "",
pathname: matches[12] || "",
directory: matches[13] || "",
filename: matches[14] || "",
search: matches[15] || "",
hash: matches[16] || ""
} : {};
} function parseCookies(header) {
if (header.length == 0) {
return [];
}
var cooks = [], i = 0, start = 0, end, dom;
do {
end = header.indexOf(',', start);
cooks[i] = (cooks[i] || '') + header.substring(start, end == -1 ? header.length : end);
start = end + 1;
if (cooks[i].indexOf('Expires=') == -1 || cooks[i].indexOf(',') != -1) {
i++;
} else {
cooks[i] += ',';
}
} while (end > 0);
for (i = 0; i < cooks.length; i++) {
dom = cooks[i].indexOf('Domain=');
if (dom != -1) {
cooks[i] = cooks[i].substring(0, dom) + cooks[i].substring(cooks[i].indexOf(';', dom) + 1);
}
}
return cooks;
} domain = parseUrl(document.location.href).domain;
XDomainRequestAdapter = function () {
var self = this,
_xdr = new XDomainRequest(),
_mime,
_reqHeaders = [],
_method,
_url,
_id = reqId++,
_setState = function (state) {
self.readyState = state;
if (typeof self.onreadystatechange === 'function') {
self.onreadystatechange.call(self);
}
},
_done = function (state, code) {
if (!self.responseText) {
self.responseText = '';
}
if (debug) {
console.log('[XDR-' + _id + '] request end with state ' + state + ' and code ' + code + ' and data length ' + self.responseText.length);
}
self.status = code;
if (!self.responseType) {
_mime = _mime || _xdr.contentType;
if (_mime.match(/\/json/)) {
self.responseType = 'json';
self.response = self.responseText;
} else if (_mime.match(/\/xml/)) {
self.responseType = 'document';
var $error, dom = new ActiveXObject('Microsoft.XMLDOM');
dom.async = false;
dom.loadXML(self.responseText);
self.responseXML = self.response = dom;
if ($(dom).children('error').length != 0) {
$error = $(dom).find('error');
self.status = parseInt($error.attr('response_code'));
}
} else {
self.responseType = 'text';
self.response = self.responseText;
}
}
_setState(state);
// clean memory
_xdr = null;
_reqHeaders = null;
_url = null;
};
_xdr.onprogress = function () {
_setState(ReadyState.LOADING);
};
_xdr.ontimeout = function () {
_done(ReadyState.DONE, 408);
};
_xdr.onerror = function () {
_done(ReadyState.DONE, 500);
};
_xdr.onload = function () {
// check if we are using a filter which modify the response
var cooks, i, resp = parseResponse(_xdr.responseText || '');
if (debug) {
console.log('[XDR-' + reqId + '] parsing cookies for header ' + resp[2]);
}
cooks = parseCookies(resp[2]);
self.responseText = resp[1] || '';
if (debug) {
console.log('[XDR-' + _id + '] raw data:\n' + _xdr.responseText + '\n parsed response: status=' + resp[0] + ', header=' + resp[2] + ', data=\n' + resp[1]);
}
for (i = 0; i < cooks.length; i++) {
if (debug) {
console.log('[XDR-' + _id + '] installing cookie ' + cooks[i]);
}
document.cookie = cooks[i] + ";Domain=" + document.domain;
}
_done(ReadyState.DONE, resp[0]);
resp = null;
};
this.readyState = ReadyState.UNSENT;
this.status = 0;
this.statusText = '';
this.responseType = '';
this.timeout = 0;
this.withCredentials = false;
this.overrideMimeType = function (mime) {
_mime = mime;
};
this.abort = function () {
_xdr.abort();
};
this.setRequestHeader = function (k, v) {
if ($.inArray(k, headers) >= 0) {
_reqHeaders.push({ k: k, v: v });
}
};
this.open = function (m, u) {
_url = u;
_method = m;
_setState(ReadyState.OPENED);
};
this.send = function (data) {
_xdr.timeout = this.timeout;
if (sessionCookie || cookies || _reqHeaders.length) {
var h, addParam = function (name, value) {
var q = _url.indexOf('?');
_url += (q == -1 ? '?' : '&') + name + '=' + encodeURIComponent(value);
if (debug) {
console.log('[XDR-' + _id + '] added parameter ' + name + "=" + value + " => " + _url);
}
};
for (h = 0; h < _reqHeaders.length; h++) {
addParam(_reqHeaders[h].k, _reqHeaders[h].v);
}
forEachCookie(sessionCookie, function (name, value) {
var q = _url.indexOf('?');
if (q == -1) {
_url += ';' + name + '=' + value;
} else {
_url = _url.substring(0, q) + ';' + name + '=' + value + _url.substring(q);
}
if (debug) {
console.log('[XDR-' + _id + '] added cookie ' + _url);
}
});
forEachCookie(cookies, addParam);
addParam('_xdr', '' + _id);
addParam('Referer', window.location.href);
}
if (debug) {
console.log('[XDR-' + _id + '] opening ' + _url);
}
_xdr.open(_method, _url);
if (debug) {
console.log('[XDR-' + _id + '] send, timeout=' + _xdr.timeout);
}
_xdr.send(data);
};
this.getAllResponseHeaders = function () {
return '';
};
this.getResponseHeader = function () {
return null;
}
}; $.ajaxSettings.xhr = function () {
var target = parseUrl(this.url).domain;
if (target === "" || target === domain) {
return oldxhr.call($.ajaxSettings);
} else {
try {
return new XDomainRequestAdapter();
} catch (e) {
}
}
}; }
})
(jQuery);

最新文章

  1. iOS 应用内的系统复制粘贴菜单显示的语言非中文
  2. HQL查询及Hibernate对c3p0连接池的支持
  3. XML 实体扩展攻击
  4. 第二百七十二、三天 how can I 坚持
  5. jquery easyui treegrid使用小结
  6. (转载)顺序栈c++实现
  7. 【字符串】【最小表示法】Vijos P1683 有根树的同构问题
  8. paip.tree 生成目录树到txt后的折叠查看
  9. Java Web系列:Spring Boot 基础 (转)
  10. 浓缩的才是精华:浅析GIF格式图片的存储和压缩
  11. 3.commonjs模块
  12. C#中MessageBox用法大全(转)
  13. nagios中监测dns 227.7.128.68的网络状态
  14. CS20SI-tensorflow for research笔记: Lecture1
  15. django中widget小部件
  16. Transactional 事务
  17. Javascript Module pattern template. Shows a class with a constructor and public/private methods/properties. Also shows compatibility with CommonJS(eg Node.JS) and AMD (eg requireJS) as well as in a br
  18. eShopOnContainers 看微服务 ②:配置 启动
  19. centos7 服务操作命令
  20. linux的错误码error

热门文章

  1. paper 97:异质人脸识别进展的资讯
  2. [Phalcon] Phalcon系统默认事件列表
  3. 解决qt程序的链接阶段出现 undefined reference 错误
  4. html5,实例开发代码
  5. 简单破解.net(C#)程序
  6. Centos6.5 安装 RabbitMQ3.6.1
  7. 接口测试之HttpClient
  8. postgresql如何实现回收站机制
  9. ASP.NET MVC学习系列(一)-WebAPI初探
  10. (1) 深入理解Java虚拟机到底是什么?