2012-08-14 119 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如何工作的概念。

相關問題