通过URL在Django页面上执行JavaScript而无需重新加载

时间:2016-09-28 14:05:18

标签: javascript ajax django

我有一个加载某些JavaScript包的网页。

www.mySite.com

如果我在浏览器控制台中输入JavaScript命令,我就可以与它们进行交互。

让我们来看看

alert('5')

作为一个简单的例子。

我希望在没有浏览器控制台的情况下执行相同的JavaScript调用,但需要通过特定的URL执行:

www.mySite.com/?value=5

这样就可以执行我的JavaScript命令了吗?

没有Page beeing重新加载/刷新但保持实际状态。

我的方法是在Django View中捕获扩展URL并执行JavaScript命令。

查看:

class ShowPage(View):
    def get(self, request, caseId):

        value = request.GET.get('value', '')

        if(value is not ''):
            // execute JavaScript here...
            return HttpResponse("<script>alert(" + value + ")</script>")
        else:
             ...
             return render(request, 'template.html', context)

但这会导致我输入网页时丢失了我的页面。

有没有人知道如何保留实际的浏览器内容? 这样可以调用加载的Javascript包吗?

另一个想法是通过Ajax调用JavaScript。但是如何将Django中的URL映射到Ajax请求?

2 个答案:

答案 0 :(得分:1)

您当前的代码在许多级别上都存在问题,特别是因为它允许用户在您的页面上执行任意JS。这称为Cross-site Scripting (XSS) attack

另一个问题是,您似乎想要在不“更改页面状态”的情况下添加GET参数。在这里,您必须记住,根据定义,GET请求是客户端和服务器之间的通信。您可以使用JS人为地更改URL的外观,但无法在不重新加载的情况下在同一页面上提交GET请求。

这就是为什么你当然想要使用AJAX,它允许你从另一个页面中获取内容并将它们返回到后台的当前页面。通常这是通过创建一个返回JsonResponse的视图(在Django 1.7+中)来完成的(参见Creating a JSON response using Django and Python)。

一个简化的例子是编码一个只显示一些文本的视图。然后你可以使用AJAX检索这个文本(我推荐jQuery用于此 - 它很简单且记录完备)并随心所欲地做任何事情,包括alert它。

答案 1 :(得分:-1)

尝试使用&#39;#&#39;:

www.mySite.com#command

这不会重新加载网站。

也许这也有帮助:

url:https://css-tricks.com/snippets/javascript/get-url-and-url-parts-in-javascript/

url:Get current URL in web browser

&#39;#&#39;:http://www.w3schools.com/html/html_links.asp

编辑:

使用&#39; eval()&#39;执行输入:

http://www.w3schools.com/jsref/jsref_eval.asp