我有一个 JavaScript 问题,这个问题已经困扰我很长一段时间了。我有一个名为 search.js 的外部文件,它与加载的 .html 文件位于同一文件夹中。
我在 HTML 中用来加载 javascript 文件的代码是:
<script type="text/javascript" src="search.js"></script>
从我读过的所有网站中,我找不到代码的问题。
另外,我知道 javascript 文件中的语法必须正确才能正常工作,因此这里是来自 search.js 的 Javascript 代码:
$(document).ready(function(){
$('#searchForm').submit(function(){
var lookfor = $("#billSearched").val();
alert(lookfor);
var a = $(this).attr('action');
alert(a);
a = a.replace("__search_term__",lookfor);
alert(a);
window.location.href = a;
return false;
});
});
我在另一个项目中运行了这段代码,它运行得很好,我所做的只是字段的名称,即 billSearched。
如果有任何其他原因导致 Javascript 无法在我的页面中加载,请留言或评论。
提前致谢!
EDIT
完整的html代码:
<html>
<head>
<title>Bills</title>
<script type="text/javascript" src="/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="/search.js"></script>
<link rel="stylesheet" href="style.css">
</head>
<body bgcolor="#0066CC" color="FFFFFF">
<table>
<tr>
<td style="color:white"><b>Products</b></td>
<td style="color:white">Price</td>
<form method="POST" id="searchForm" action="{% url ps.views.search searchTerm='__search_term__' %}">
{% csrf_token %}
<td><input type="text" id="billSearched"></td>
<td><input type="submit" value="Search"></td>
</form>
</tr>
{% for x in products %}
<tr>
<td style="color:white">{{ x.name }}</td>
<td style="color:white">{{ x.price }}</td>
</tr>
{% endfor %}
</tr>
</table>
</body>
从标签和模板代码中,我了解到您正在使用 Django。要了解您的问题,您必须了解 Django 视图相对于您的浏览器的工作方式,以及当您的浏览器向给定 url 发出请求时会发生什么。
发生了什么Django
side:
当你请求一个 url 时会发生什么,你的基础urls.py
文件将被搜索以匹配您的 url 的模式。如果遇到某个模式,则对应的view
将被调用。
The view
将执行其逻辑,并将使用template
将其响应呈现为html
.
从浏览器的角度来看会发生什么
浏览器请求一个 url,并收到响应,它不知道调用了视图,并且在某处获取了模板。
这对你意味着什么
事实是你的search.js
文件位于您的模板旁边完全不相关,作为您的浏览器从未请求此目录中的任何文件,这是view
确实如此,当它获取它的template
.
实际上,您的浏览器的请求search.js
将转发至Django
通过您的网络服务器,并且(很可能)会导致404
错误,除非search.js
解析为您的视图urls.py
.
如何使用它来解决您的问题
你需要为你的search.js
浏览器可以访问的目录中的文件。通常,这分三个步骤完成:
配置您的网络服务器,使其提供以以下开头的任何路径/static/
就其本身而言(不知何故,这意味着不将请求转发到Django
).
在 Apache 中,您可以使用以下规则:Alias /static/ /YOUR/STATIC/DIRECTORY/
配置Django
's settings.py
to use /YOUR/STATIC/DIR
as STATIC_ROOT
, and /static/
as STATIC_URL
.
把你的search.js
文件在你的/YOUR/STATIC/DIR/
Use src="/static/search.js
在您的文件中引用您的文件html
模板。
最后一件事:如果您使用开发服务器,您可能需要确保您的STATIC_URL
从服务器的完整路径开始,包括端口。 (或者您可能遇到浏览器安全策略问题)。
一些补充:
您应该使用模板标签,这样您就不必编写/static/
在你的模板中。
你应该使用manage.py collectstatic
自动将静态文件放入静态目录中。
最重要的是,你应该调查一下 Django 的 MVC(或 MTV)模型是关于什么的.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)