带有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

  • 由于浏览器安全限制,大多数Ajax请求都受到相同的源策略的限制; 该请求无法成功从不同的域,子域,端口或协议中检索数据。
  • 脚本和JSONP请求不受相同的源策略限制。
  • 有一些方法可以克服跨域障碍:

  • CORS代理替代品
  • 避开同源政策的方法
  • 打破跨域障碍
  • 有一些插件可以帮助跨域请求:

  • 使用YQL和jQuery跨域AJAX请求
  • 使用jQuery.ajax进行跨域请求
  • 抬头!

    解决这个问题的最好方法是在后端创建自己的代理,以便代理将指向其他域中的服务,因为在后端不存在相同的源策略限制。 但是如果你不能在后端做到这一点,那么请注意以下提示。


    警告!

    使用第三方代理并不是一种安全的做法,因为他们可以跟踪您的数据,因此它可以用于公共信息,但不会使用私人数据。


    下面显示的代码示例使用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-Proxy gr2m
  • CORS-Proxy rmadhuram
  • 它是如何工作的? 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

    上一篇: domain endpoint with jQuery AJAX

    下一篇: change mime type of output in php