我已将页面缩小到最低限度以重新创建此问题。它看起来像这样:
<!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? (不确定我是否应该删除并重新发布这个新问题)
答案 0 :(得分:2)
https://malsup.github.com/jquery.form.js执行301重定向到http://malsup.github.com/jquery.form.js,最终成为不安全的资源。因此错误。我坦率地不知道为什么他们会这样做。这就是阻止你的问题。