2012-08-14 89 views
-2

我们有一个程序可以在实时环境或测试环境中运行。唯一的区别是测试环境中的URL包含“/ test /”。在测试环境中,有些函数会导致它切换到实时环境(当URL被硬编码时!),所以我试图解决这个问题。如何在Python中获取此JavaScript函数的返回值?

我已经在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包含返回值(无需用户交互)?

+0

你使用框架吗?打印的字符串如何到达浏览器? – Fabian 2012-08-14 10:55:24

+0

@Fabian:我是一个完整的新手编辑继承代码,所以我不确定。我不认为我们使用框架(只是检查导入)。除了这里陈述的内容,我不知道打印的字符串如何到达浏览器。我们有一个我们放置Python文件的文件夹,页面可以立即在公司内部网中看到。 – Wikis 2012-08-14 11:00:58

+0

它可能是mod_python或mod_wsgi的Apache吗?它将在您正在编辑的文件的顶部导入哪些模块?你能把他们纳入你的问题吗? 你真的应该知道你在使用什么,并让我们知道,以便我们能够正确回应。无论如何,你需要的是通过XMLHttpRequest对象形式提交或Ajax调用。 – Fabian 2012-08-14 13:19:54

回答

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脚本是正确的。

但是,您应该阅读CGI,Ajax以及mod_python如何工作的概念。

相关问题