当网站通过https加载时,为什么.ajaxForm()不起作用?

时间:2015-02-12 21:22:25

标签: jquery ajax django

我已将页面缩小到最低限度以重新创建此问题。它看起来像这样:

<!DOCTYPE html>
<html lang="en">
<head>
    {% load staticfiles %}
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script> 
    <script src="//malsup.github.com/jquery.form.js"></script> 
    <script type="text/javascript">
        $(document).ready(
                function() {
                    $('#signupform').ajaxForm(
                            function(new_html) {
                                alert("testing!");
                            });
                });
    </script>
</head>

<body>
    <form id="signupform" action="{% url 'index' %}" method="post">
            {% csrf_token %}
            {{ form.email }}
            {{ form.university }}
            <button type="submit">
                GET EARLY ACCESS
            </button>
    </form>
</body>
</html>

基本上只是一个来自和一些jquery,它使用.ajaxForm()来修改表单。

当我通过HTTP加载网站时,它按预期工作:当按下按钮时,会发出“测试!”警报。显示,POST在后台发送,没有重定向。当我通过HTTPS运行它时会出现问题,就像javascript甚至不存在一样。当我单击提交按钮时,没有警报,网站正常重定向。

我已在本地使用标准$ python manage.py runserver的HTTP进行了测试,并使用带有$ python manage.py runsslserver的{​​{3}}进行了HTTPS测试。我也在我们的Heroku登台服务器上运行该应用程序并获得完全相同的http / https差异。

当网站通过https而不是http加载时,可能导致此javascript的行为有何不同?

更新:根据评论,这是javascript控制台输出:

  

混合内容:加载了“django-sslserver”页面   HTTPS,但请求一个不安全的脚本   'https://localhost:8000/'。这个要求已经   堵塞;内容必须通过HTTPS提供。

这改变了问题的性质。现在的问题是:为什么

  

// malsup.github.com/jquery.form.js

没有加载https? (不确定我是否应该删除并重新发布这个新问题)

1 个答案:

答案 0 :(得分:2)

https://malsup.github.com/jquery.form.js执行301重定向到http://malsup.github.com/jquery.form.js,最终成为不安全的资源。因此错误。我坦率地不知道为什么他们会这样做。这就是阻止你的问题。