在 Transcrypt 中使用 XMLHttpRequest()
Using XMLHttpRequest() in Transcrypt
我只有极少的 JavaScript 知识来自编写完全客户端的小型 API 站点。
如何在 Transcrypt 中使用 XMLHttpRequest()
?或者我应该使用 URLlib
还是其他东西?
是否像在 JS 中创建一个新的 XMLHttpRequest 对象然后发送数据或检索页面一样简单?
XHR = XMLHttpRequest()
XHR.open("POST", "https://example.com/cors.php")
确实和JS一样简单,只有Python语法:
def read_file():
xmlhttp= __new__ (XMLHttpRequest())
xmlhttp.open('GET', 'https://github.com/QQuick/Transcrypt/blob/master/README.rst', False);
xmlhttp.send()
console.log(xmlhttp.responseText)
在你的例子中是:
XHR = __new__ (XMLHttpRequest())
XHR.open("POST", "https://example.com/cors.php")
注意 __new__ ()
函数。在 JavaScript 中,它应该是 new
运算符,但 Python 语法不允许这样做。
如果你想完全避免 __new__ ()
你可以封装 XMLHttpRequest
i 一个 true Python class (现在是一个 JS 函数),但没有必要。
见
关于使用或避免使用 __new__ ()
的一般说明。
您也可以通过 JQuery,如下面更大的示例:
__pragma__ ('alias', 'jq', '$')
__pragma__ ('noalias', 'clear')
# For use by eval'ed turtle applet
import turtle
import random
import math
def clear ():
editor.setValue ('')
turtle.reset ()
run ()
def run ():
def success (result):
global random
turtle.reset ()
rnd = random
eval (result)
random = rnd
def fail (a, b, c):
print ('Run error:', a, b, c)
# N.B. The request has to be explicitly encoded, but the response is already implicitly decoded
jq.ajax ({
'url':'http://www.transcrypt.org/compile',
'type': 'POST',
'data': JSON.stringify (editor.getValue ()),
'dataType': 'json',
'contentType': 'application/json',
'success': success,
'fail': fail
})
def mail ():
def success (result):
print (result)
def fail (a, b, c):
print ('Run error:', a, b, c)
jq.ajax ({
'url':'http://www.transcrypt.org/mail',
'type': 'POST',
'data': JSON.stringify ([document.getElementById ('mail_address') .value, editor.getValue ()]),
'dataType': 'json',
'contentType': 'application/json',
'success': success,
'fail': fail
})
def selectExample ():
def success (result):
editor.setValue (result [0])
turtle.reset () # Using old paths
window.terminate = True
console.log (result [1])
eval (result [1]) # Using new paths (so cannot clear old result)
def fail (a, b, c):
print ('Select example error:', a, b, c)
selector = document.getElementById ('select_example')
jq.ajax ({
'url':'http://www.transcrypt.org/example',
'type': 'POST',
'data': JSON.stringify (selector.options [selector.selectedIndex] .value),
'dataType': 'json',
'contentType': 'application/json',
'success': success,
'fail': fail
})
selectExample ()
这是在以下位置完成的方式:
http://www.transcrypt.org/live/turtle_site/turtle_site.html
[编辑]
(回应OP的评论)
事实上任何普通的JavaScript对象都可以用这种方式实例化。请注意,在特殊情况下,您始终可以插入一段文字 JS 代码,如中所述:
至于可用的库,Transcrypt 旨在直接使用任何 JS 库,因为 JS 库往往专注于与 client/browser.
相关的功能。
尽管如此,可用标准库的数量仍在增长。目前可用的有:
- cmath
- 日期时间
- 检查
- itertools
- 日志记录
- 数学
- 随机(部分)
- 重新(几乎完成)
- 时间
- 乌龟(几乎完成)
- 警告
除此之外,还有一个 Numpy 的小而有用的部分的端口,如以下所述:
http://www.transcrypt.org/numscrypt/docs/html/supported_constructs.html
可在以下位置获得:
我只有极少的 JavaScript 知识来自编写完全客户端的小型 API 站点。
如何在 Transcrypt 中使用 XMLHttpRequest()
?或者我应该使用 URLlib
还是其他东西?
是否像在 JS 中创建一个新的 XMLHttpRequest 对象然后发送数据或检索页面一样简单?
XHR = XMLHttpRequest()
XHR.open("POST", "https://example.com/cors.php")
确实和JS一样简单,只有Python语法:
def read_file():
xmlhttp= __new__ (XMLHttpRequest())
xmlhttp.open('GET', 'https://github.com/QQuick/Transcrypt/blob/master/README.rst', False);
xmlhttp.send()
console.log(xmlhttp.responseText)
在你的例子中是:
XHR = __new__ (XMLHttpRequest())
XHR.open("POST", "https://example.com/cors.php")
注意 __new__ ()
函数。在 JavaScript 中,它应该是 new
运算符,但 Python 语法不允许这样做。
如果你想完全避免 __new__ ()
你可以封装 XMLHttpRequest
i 一个 true Python class (现在是一个 JS 函数),但没有必要。
见
关于使用或避免使用 __new__ ()
的一般说明。
您也可以通过 JQuery,如下面更大的示例:
__pragma__ ('alias', 'jq', '$')
__pragma__ ('noalias', 'clear')
# For use by eval'ed turtle applet
import turtle
import random
import math
def clear ():
editor.setValue ('')
turtle.reset ()
run ()
def run ():
def success (result):
global random
turtle.reset ()
rnd = random
eval (result)
random = rnd
def fail (a, b, c):
print ('Run error:', a, b, c)
# N.B. The request has to be explicitly encoded, but the response is already implicitly decoded
jq.ajax ({
'url':'http://www.transcrypt.org/compile',
'type': 'POST',
'data': JSON.stringify (editor.getValue ()),
'dataType': 'json',
'contentType': 'application/json',
'success': success,
'fail': fail
})
def mail ():
def success (result):
print (result)
def fail (a, b, c):
print ('Run error:', a, b, c)
jq.ajax ({
'url':'http://www.transcrypt.org/mail',
'type': 'POST',
'data': JSON.stringify ([document.getElementById ('mail_address') .value, editor.getValue ()]),
'dataType': 'json',
'contentType': 'application/json',
'success': success,
'fail': fail
})
def selectExample ():
def success (result):
editor.setValue (result [0])
turtle.reset () # Using old paths
window.terminate = True
console.log (result [1])
eval (result [1]) # Using new paths (so cannot clear old result)
def fail (a, b, c):
print ('Select example error:', a, b, c)
selector = document.getElementById ('select_example')
jq.ajax ({
'url':'http://www.transcrypt.org/example',
'type': 'POST',
'data': JSON.stringify (selector.options [selector.selectedIndex] .value),
'dataType': 'json',
'contentType': 'application/json',
'success': success,
'fail': fail
})
selectExample ()
这是在以下位置完成的方式:
http://www.transcrypt.org/live/turtle_site/turtle_site.html
[编辑]
(回应OP的评论)
事实上任何普通的JavaScript对象都可以用这种方式实例化。请注意,在特殊情况下,您始终可以插入一段文字 JS 代码,如中所述:
至于可用的库,Transcrypt 旨在直接使用任何 JS 库,因为 JS 库往往专注于与 client/browser.
相关的功能。尽管如此,可用标准库的数量仍在增长。目前可用的有:
- cmath
- 日期时间
- 检查
- itertools
- 日志记录
- 数学
- 随机(部分)
- 重新(几乎完成)
- 时间
- 乌龟(几乎完成)
- 警告
除此之外,还有一个 Numpy 的小而有用的部分的端口,如以下所述:
http://www.transcrypt.org/numscrypt/docs/html/supported_constructs.html
可在以下位置获得: