如何使用jQuery创建AJAX HTTPS GET请求

时间:2014-01-11 00:35:19

标签: jquery ajax https get

如何使用jQuery显式发出AJAX HTTPS GET请求?我正在尝试执行以下操作。 在https页面上,我有一行代码$.get("/resource"),但我收到以下错误

XMLHttpRequest cannot load http://www.site.com/resource. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.site.com' is therefore not allowed access.

如果相对资源来自https页面,为什么AJAX调用尝试使用HTTP协议访问页面?如果$ .get(url)方法默认执行此操作,如何使用jQuery执行显式HTTPS GET请求?另一个在http://forum.jquery.com/topic/jquery-get-ajax-call-on-http-page-to-https-on-same-domain遇到类似问题的人无法解决问题。

jQuery版本是1.7.2

4 个答案:

答案 0 :(得分:43)

我解决了这个问题。事实证明,由于我们的Django站点的配置方式,我需要在AJAX请求中向资源添加一个尾部斜杠。如果没有斜杠,Django将使用HTTP请求而不是HTTPS请求重定向到带有斜杠的URL。

简而言之,我将$.get("/resource")替换为$.get("/resource/")

谢谢。我非常感谢你的帮助。

答案 1 :(得分:9)

如果您所在的页面是https页面,并且页面.get尝试访问的页面是http,那么由于相同的来源,该页面将无效。但是,你可以写出ajax,而不是用.get :)来简单地处理它。

$.ajax({
    type: "GET", 
    url: "https://someurl"
});

虽然我认为公平,但仍然缺少真正的javascript

答案 2 :(得分:2)

尝试将数据类型设置为“jsonp”,这有助于我过去使用跨源请求。

    $.ajax({
            url: "//www.site.com/resource"
            dataType: "jsonp",
            success: function(data) {
                $(".demo-card").html(data);
            }
    });

答案 3 :(得分:0)

只需在.htaccess文件中使用指定协议的RewriteRule,例如:

RewriteCond %{REQUEST_URI} .+[^/]$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L,QSA]