【问题标题】:How can I get the return value of this JavaScript function in Python?如何在 Python 中获取此 JavaScript 函数的返回值?
【发布时间】:2012-08-14 09:50:14
【问题描述】:

我们有一个程序可以在实时环境或测试环境中运行。唯一的区别是测试环境上的 URL 包含“/test/”。在测试环境中,某些功能会导致它切换到实时环境(当 URL 是硬编码时!),所以我正在尝试修复它。

我在 JavaScript 中创建了这个函数:

function GetTestMode()
{
    // If "/test/" exists in URL, keep it there (we are in test mode).
    var currentURL = document.URL;
    var sTestMode = "";
    if (currentURL.indexOf("/test/") != -1)
    {
    // test mode (according to URL)
      sTestMode = "test/";
    }
    return sTestMode;
}

这由 JavaScript 函数使用并按预期工作。

但是,大部分 UI 代码都是用 Python 编写的(创建 HTML)。所以我想在 Python 中得到这个 JavaScript 结果。到目前为止,我有:

import cgi
import os
import sys
import re

def DrawUI (self, short=False):
    print '<br />'
    print '<div class="box2">'
    print '<table cellspacing=0 cellpadding=0 border="0">'
    print '<tr>'

    sTestMode = "test mode = %s" % ('<a href="javascript:GetTestMode()" >')
    print 'sTestMode = ' + sTestMode + '<br />'

这会导致此代码后面的打印语句(甚至可以是print 'hello world')变成一个链接,如果我点击它,就会显示浏览器中 JavaScript 函数的正确返回值。

如何让sTestMode 包含返回值(无需用户交互)?

【问题讨论】:

  • 你使用框架吗?打印出来的字符串如何到达浏览器?
  • @Fabian:我是一个编辑继承代码的完整新手,所以我不确定。我不认为我们使用框架(只是检查导入)。除了这里所说的,我不知道打印的字符串是如何到达浏览器的。我们有一个存放 Python 文件的文件夹,并且页面在我们公司的 Intranet 中立即可见。
  • 可能是带有 mod_python 或 mod_wsgi 的 Apache 吗?它在您正在编辑的文件的顶部导入了哪些模块?你能把它们放在你的问题中吗?您应该真正弄清楚您在使用什么并让我们知道,以便我们能够正确响应。无论如何,您需要的是通过 XMLHttpRequest 对象提交表单或 Ajax 调用。
  • 我打算使用 jQuery AJAX 提出同样的建议 - ryanfunduk.com/web-dynamism-1
  • 感谢您的回复。我只是还没有这些问题的答案。但是我有一个solution 来解决我的特定原始问题,所以我不再需要这个“解决方法”。

标签: javascript python html


【解决方案1】:

我假设您使用的是mod_python

这是一个如何将 Javascript 变量发送到服务器的破解示例。

在 Python 中,使用 cgi module:

form = cgi.FieldStorage()
sTestMode = form.getfirst('sTestMode')
sTestMode = cgi.escape(sTestMode)  # Avoid script injection escaping the user input

在 JavaScript 中,使用 JQuery(不确定这是否正确,如果错误,也许一些 JQuery 大师可以解决此问题):

var filename = '/url/to/your/script';
$.ajax({
  url: filename + '?sTestMode=' + sTestMode,
  type: 'GET'
});

如果您在实现 Javascript 版本时遇到问题,您可以通过在浏览器中调用 /url/to/your/script?sTestMode=something_funny 来确保您的 Python 脚本正确。

但是,您应该阅读CGIAjax 的概念以及mod_python 的工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多