带有jQuery AJAX的域名终端
我试图使用AJAX加载跨域HTML页面,但除非dataType是“jsonp”,否则我无法获得响应。 然而,使用jsonp浏览器期待脚本MIME类型,但接收“文本/ HTML”。
我的请求代码是:
$.ajax({
type: "GET",
url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
dataType: "jsonp",
}).success( function( data ) {
$( 'div.ajax-field' ).html( data );
});
有没有办法避免使用jsonp的请求? 我已经尝试过使用crossDomain参数,但它不起作用。
如果没有,有没有在jsonp中接收html内容的方法? 目前控制台在jsonp回复中表示“意外<”。
jQuery Ajax Notes
有一些方法可以克服跨域障碍:
有一些插件可以帮助跨域请求:
抬头!
解决这个问题的最好方法是在后端创建自己的代理,以便代理将指向其他域中的服务,因为在后端不存在相同的源策略限制。 但是如果你不能在后端做到这一点,那么请注意以下提示。
警告!
使用第三方代理并不是一种安全的做法,因为他们可以跟踪您的数据,因此它可以用于公共信息,但不会使用私人数据。
下面显示的代码示例使用jQuery.get()和jQuery.getJSON() ,它们都是jQuery.ajax()的简写方法。
CORS任何地方
CORS Anywhere是一个node.js代理 ,它将CORS头添加到代理请求中。
要使用API,只需在URL中加上前缀即可。 (支持https :请参阅github存储库)
如果您想在需要时自动启用跨域请求,请使用以下代码段:
$.ajaxPrefilter( function (options) {
if (options.crossDomain && jQuery.support.cors) {
var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
//options.url = "http://cors.corsproxy.io/url=" + options.url;
}
});
$.get(
'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
不管起源
无论Origin是跨域jsonp访问。 这是anyorigin.com的开源替代品。
要从google.com获取数据,您可以使用以下代码段:
// It is good specify the charset you expect.
// You can use the charset you want instead of utf-8.
// See details for scriptCharset and contentType options:
// http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
$.ajaxSetup({
scriptCharset: "utf-8", //or "ISO-8859-1"
contentType: "application/json; charset=utf-8"
});
$.getJSON('http://whateverorigin.org/get?url=' +
encodeURIComponent('http://google.com') + '&callback=?',
function (data) {
console.log("> ", data);
//If the expected response is text/plain
$("#viewer").html(data.contents);
//If the expected response is JSON
//var response = $.parseJSON(data.contents);
});
CORS代理
CORS Proxy是一个简单的node.js代理 ,用于为任何网站启用CORS请求。 它允许您网站上的JavaScript代码访问通常会由于同源策略而被阻止的其他域上的资源。
它是如何工作的? CORS代理利用跨源资源共享,这是一项与HTML 5一起添加的功能。服务器可以指定他们希望浏览器允许其他网站请求他们托管的资源。 CORS Proxy只是一个HTTP代理服务器,它在响应中添加一个标题,标明“任何人都可以请求这个”。
这是实现目标的另一种方式(请参阅www.corsproxy.com)。 你所要做的就是去掉http://和www。 从被代理的网址开始,并在www.corsproxy.com/
加上网址。
$.get(
'http://www.corsproxy.com/' +
'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
function (response) {
console.log("> ", response);
$("#viewer").html(response);
});
CORS代理浏览器
最近我发现了这个,它涉及各种面向安全的Cross Origin远程共享工具。 但它是一个以Flash作为后端的黑盒子。
你可以在这里看到它的作用:CORS代理浏览器
获取GitHub上的源代码:koto / cors-proxy-browser
你可以使用Ajax-cross-origin一个jQuery插件。 有了这个插件,你可以使用jQuery.ajax()
跨域。 它使用Google服务来实现这一点:
AJAX Cross Origin插件使用Google Apps脚本作为代理jSON getter,其中未实现jSONP。 当您将crossOrigin选项设置为true时,插件会将原始网址替换为Google Apps脚本地址,并将其作为编码url参数发送。 Google Apps脚本使用Google服务器资源获取远程数据,并将其作为JSONP返回给客户端。
使用非常简单:
$.ajax({
crossOrigin: true,
url: url,
success: function(data) {
console.log(data);
}
});
你可以在这里阅读更多:http://www.ajax-cross-origin.com/
如果外部站点不支持JSONP或CORS,则唯一的选择是使用代理。
在请求该内容的服务器上构建一个脚本,然后使用jQuery ajax在您的服务器上创建脚本。
链接地址: http://www.djcxy.com/p/47595.html