在JavaScript文件中设置变量值

问题描述:

我在我的服务器上有一个Python脚本和一个JS。在python脚本中,我想将变量的值设置为我的.js文件中某个函数的输出。在JavaScript文件中设置变量值

这是可能的,如果是这样的话会怎么做呢?

谢谢!

作为Macha建议(Ajax查询)的替代方案,您也可以动态创建Javascript文件。

当页面被加载时,JavaScript被加载。在你的页面的URL的JavaScript在

<SCRIPT LANGUAGE="JAVASCRIPT" SRC="mycode.js" TYPE="TEXT/JAVASCRIPT"> 

诀窍形式现在让服务器不服务于静态文件“mycode.js”,但如输出mycode.py。因此,你的标签看起来像

<SCRIPT LANGUAGE="JAVASCRIPT" SRC="mycode.py" TYPE="TEXT/JAVASCRIPT"> 

和Python脚本看起来像可能(简体):

var_value = "whatever you want the variable to be" 

jsfile = open("myscript.js", "rb") 
for line in jsfile: 
    print line.replace("$MYVAR$", var_value) 

jsfile.close() 

总之,你有你当前的js文件,但你会用它作为python脚本的模板。你用你的变量替换它的值。

它可能不是最优雅的解决方案,但它应该工作,并不是很难理解。

不要忘记,你的服务器应该知道如何处理Python脚本:)

+1

只有一点:'language =“javascript”'多年来一直不需要。这对'type =“text/javascript”'是多余的。 – Macha 2010-07-03 15:13:26

+0

实际上,除了'src'之外的所有属性都不再需要了。 – 2010-07-03 18:52:29

+0

@Justin Johnson即使SRC指向一个python脚本?这意味着将分析URL的内容以检查其包含的代码类型。 – extraneon 2010-07-04 11:32:56

这是不可能的,因为Javascript通常运行在客户端,而Python运行在服务器端。

如果它是需要在客户端运行的代码,让它发送一个AJAX请求到一个python脚本并提供你需要的结果。如果它不需要在客户端运行,我建议你用Python重写它。

+0

Thanks Macha!所以,我可以让脚本运行客户端,并远程调用HTML或JS调用python吗?我可以重写Python脚本来返回一个值,我可以从我的HTML页面或JS调用它,对吧? – 2010-07-03 14:31:22

+0

它必须将值打印到页面上,而不仅仅是返回它,以便Javascript能够读取它。 – Macha 2010-07-03 14:33:52

您可以简单地从你的Python脚本打印的JavaScript块...并且在从外部脚本中使用这些块设置变量。

<script language="javascript">var myvalue="data";</script> 

使用simplejson你甚至可以打印数组和类似的东西。

只要确保JavaScript文件中的代码位于整个页面加载后调用的函数中,或者在页面末尾加载JavaScript文件。

如果您使用的是webpack,在不加载任何http请求的情况下在python和javascript文件之间共享变量的一种方式是将变量以yaml或json等可序列化的格式存储,并使用yaml加载器将其解析到前端。

const.yaml

DAY_MON: MON 

DAYS: 
    - MON 
    - TUE 

MAP_CONTENT_TYPE_TO_EXTENSION: 
    image/gif: .gif 
    image/jpg: .jpg 

const.py

import yaml 
globals().update(yaml.load(open('./const.yaml'))) 
print DAY_MON 
print DAYS 
print MAP_CONTENT_TYPE_TO_EXTENSION 

# MON 
# ['MON', 'TUE'] 
# { 'image/gif': '.gif', 'image/jpg': '.jpg' } 

安装装载机解析YAML npm install yaml-loader

const.js

import data from "json-loader!yaml-loader!./const.yaml"; 
data.ANOTHER_VARIABLE = "SOME_VAR"; 
export default data; 

read.js

import constants from './const.js'; 

console.log(constants.ANOTHER_VARIABLE); 
console.log(constants.LISTING_TYPE_BRAND); 
console.log(constants.DAYS); 
console.log(constants.MAP_CONTENT_TYPE_TO_EXTENSION); 

// SOME_VAR 
// MON 
// ['MON', 'TUE'] 
// { 'image/gif': '.gif', 'image/jpg': '.jpg' }